R语言基础系列:
Your first R function命令一个函数时,一般不写在交互式命令行里,而是写在一个空白的文本文件中,即把函数放在一个R包中,这里面包含着文档(documentation),是一个更加结构化的环境。
我们使用的软件是RStudio,左上角新建一个新的R脚本来写代码。
Example 1
举个例子,简单了解一下如何使用函数的语法、如何指定参数以及如何返回结果:
命令一个简单的函数,求x, y的和。
## 给函数赋值为add2,第一行小括号里写进变量,第二行大括号里写入运算
add2function(x,y){
x+y
}
## 因为R函数会返回最后一个表达式的值,所以不用写返回
在控制台(console)运行脚本,赋值后即可得到结果:
>add2function(x,y){
+x+y
+}
>add2(7,5)
[1]12
Example 2
下一个例子稍微复杂一点:
我们要输入一个数字向量,然后返回这个向量的子集(返回其中大于10的数字)
above10function(x){## 命名变量
usex>10## 逻辑语句,来判断变量x是否大于10
x[use]## 取子集
}
运行:
>above10function(x){
+usex>10
+x[use]
+}
>x1:16
>above10(x)
[1]111213141516
>above10(1:9)
integer(0)
如果我们不设置10,而是改成任意数字n,以上命令可改写为:
abovefunction(x,n){
usex>n
x[use]
}
运行:
>abovefunction(x,n){
+usex>n
+x[use]
+}
>x1:16
>above(x,12)
[1]13141516
设置“缺省值”(可以理解为默认值),即如果在函数运行过程中不指定n的值时,系统自动筛选的标准:
abovefunction(x,n=10){## 设置缺省值为10
usex>n
x[use]
}
这时当你运行函数时:
>abovefunction(x,n=10){
+usex>n
+x[use]
+}
>above(x)## 自动筛选数字向量中大于10的数字
[1]111213141516
Example 3
下面这个例子再复杂一点,我们要给函数一个参数,然后使用循环遍历这个函数的每一列:
比如,取一个矩阵,然后计算每列的平均值:
columnmeanfunction(x){## 给函数命名,设置参数x,用于储存矩阵
ncncol(x)## 计算矩阵中有多少列
meansnumeric(nc)## 设置数值向量储存列数