R中最重要的两个部分:对象,用来存储数据;函数,用来操作数据
1.对象
传递到函数中的数据称为函数的参数。参数可以是原始数据、R对象。甚至可以是另一函数的返回结果(由内到外执行)
> die<-1:6
> mean(die)
[1] 3.5
> mean(1:6)
[1] 3.5
> round(mean(die))
[1] 4
参数可以有多个,并用逗号隔开
2模拟骰子
.sample函数有两个参数,x向量和size,作用:从向量x中抽取size个元素并返回
> sample(1:6,5)
[1] 1 2 6 5 3
> sample(x=1:6,size=5)
[1] 3 4 1 6 5
如果设置参数时,不写参数名称,输入参数时就要按R的的顺序输入;若写了参数名称,则可以不按顺序
> sample(size=5,x=1:6)
[1] 5 2 4 6 1
3.设置参数
当不知道如何设置其中的参数,可以通过args函数查看这个函数的所有参数名
digits为可选参数,如果不明确赋值,就会使用默认值。此处round的可选参数表示的是保留到小数点后几位
> args(round)
function (x, digits = 0)
NULL
> round(3.1456,2)
[1] 3.15
4.可抽回放样——创建独立随机样本的简单方法
replace true的作用是将sample函数的抽样类型设定为可放回抽应
> sample(die,size=3,replace = TRUE)
[1] 2 6 6
5.编写自定义函数
5.1 模拟掷一对骰子的程序
> die<-1:6
> dice<-sample(die,size=2,replace = TRUE)
> sum(dice)
目的:编写roll()函数,每次调用roll时,R都会返回两个骰子点数的和
5.2函数构建器
5.2.1 任何一个R函数都包括三部分:函数名、程序主体、参数集合
5.2.2 function的作用是将大括号中的所有代码构建成一个函数 function(){}
> roll<-function()
+ {die<-1:6
+ dice<-sample(die,size=2,replace=TRUE)
+ sum(dice)}
> roll()
[1] 9
> roll
function()
{die<-1:6
dice<-sample(die,size=2,replace=TRUE)
sum(dice)}
注:R会忽略所有空格和换行符这样是为了增强可读性
()为函数触发器,当只输入函数名而没带上(),R只会展示这个函数存储的代码;带上()才会运行这段代码
5.2.3 运行一个函数时,R会顺序执行该函数主体中的所有代码,并返回最后一行代码的运行结果。如果最后一行代码不返回任何值,整个函数也就没有返回值
6.参数
当函数有参数名bones时,调用函数时将bones提供给该函数,即可 :roll(bones=1:4)
> roll<-function(die)
+ {
+ dice<-sample(die,size=2,replace=TRUE)
+ sum(dice)}
> roll(die=1:8)
[1] 11
也可以为函数参数bones设定一个初始默认值 。
roll<-function(die=1:6)