<- function(x, y) {
add print(x-y)
return (x + y)
}
7 什么是函数
R语言的函数是一种特殊的程序,它可以接收参数,并返回一个结果。函数的返回值是函数运行完成后返回给调用者的结果。
假设你有一个名为add()
的函数,它可以接收两个数字,打印它们的差,并返回它们的和。你可以用以下代码定义这个函数:
这个函数定义中,我们用function()
关键字来定义函数,然后在括号内指定函数的参数,在花括号内指定函数的运算过程。最后,我们使用return()
函数来指定函数的返回值。
在这个例子中,函数add()
的两个参数分别是x
和y
,返回值是它们的和。你可以用以下代码来调用这个函数:
<- add(3, 5) result
[1] -2
在这里,我们将3和5作为参数传递给函数add()
,然后将它们相加,并将结果保存到变量result
中。
7.1 函数的构成要素
一个函数通常由以下几个要素构成:
函数名:这是函数的标识符,用于调用函数。
参数(或形参):这是函数的输入,函数在执行时需要根据参数进行计算。
函数体:这是函数执行的代码块,包含了函数所要完成的操作。
返回值(或实参):这是函数的输出,函数执行完成后会返回一个值。
这些要素构成了一个完整的函数,它们各自扮演着不同的角色,协同工作以完成函数的目标。
例如,如果你要定义一个函数来计算数据集的平均值,那么可以这样写:
<- function(x) {
mean = sum(x)
sum = length(x)
n return(sum / n)
}
这个函数的名称是mean
,它有一个参数x
,函数体中包含了计算平均值的代码,最后会返回计算结果。
7.2 R语言函数的分类
R语言中的函数可以分为几大类:
基础包中的函数:这些函数是R语言的内置函数,包括常见的数学运算、统计分析、数据处理和可视化等操作。例如,mean()函数可以计算数据集的平均值,plot()函数可以绘制数据的图形。
包中的函数:R语言中有许多第三方包,这些包提供了额外的函数和功能。例如,ggplot2包提供了用于绘制复杂图形的函数,dplyr包提供了高效的数据处理函数。要使用这些函数,需要先安装并加载相应的包。
用户自定义函数:这些函数是用户自己定义的,用于执行特定的任务。例如,如果你有一个复杂的分析流程,可以将这个流程封装成一个函数,以便在需要时调用。
7.3 函数示例
如下代码定义了一个名叫f1的函数,作用是打印两个数的和,返回两个数的差。
<- function(x, y) {
f1 print(x + y)
return (x - y)
}
在这个例子中,我们使用print()
函数打印出两个数的和,并使用return()
函数返回两个数的差。
你可以用以下代码来调用这个函数:
<- f1(3, 5) result
[1] 8
result
[1] -2
在这里,我们将3和5作为参数传递给函数f1()
,然后函数会先打印出两个数的和,再返回两个数的差。执行完这个代码后,变量result
的值为-2。
7.4 定义函数可以不写return吗?
是的,在R语言中,定义函数时可以不写return()
函数。如果函数没有使用return()
函数指定返回值,则函数会自动返回最后一个计算结果作为返回值。例如,假设你有一个名为add()
的函数,它可以接收两个数字,并返回它们的和。你可以用以下代码定义这个函数:
<- function(x, y) {
add + y
x }
在这个例子中,我们省略了return()
函数,直接将两个数的和作为函数的返回值。你可以用以下代码来调用这个函数:
<- add(3, 5)
result result
[1] 8
在这里,我们将3和5作为参数传递给函数add()
,函数会自动返回它们的和。执行完这个代码后,变量result
的值为8。
7.5 函数的调用
在R语言中,可以通过使用函数名称来调用函数。例如,要调用mean()函数,可以这样写:
mean(1:10)
[1] 5.5
当然,你也可以在调用函数时向函数传递额外的参数。例如,要计算一个数据集的中位数,可以这样写:
median(c(1:10,NA), na.rm = TRUE)
[1] 5.5
在这个例子中,我们向median()函数传递了一个参数,即na.rm = TRUE。这个参数告诉R语言在计算中位数时忽略数据集中的缺失值。
7.6 写一个计算偏度和峰度的函数
下面是一个计算偏度和峰度的函数:
<- function(x) {
skew_kurtosis
= sum((x - mean(x))^3) / (length(x) * sd(x)^3)
skew
= sum((x - mean(x))^4) / (length(x) * sd(x)^4) - 3
kurtosis
return(c(skew, kurtosis))
}
这个函数接收一个向量x作为参数,并计算x的偏度和峰度。计算完成后,会将结果放在一个向量中返回。
例如,要计算一个数据集的偏度和峰度,可以这样写:
skew_kurtosis(1:10)
[1] 0.000000 -1.561636
这个函数会计算data的偏度和峰度,并将结果作为向量返回。