1. apply函数
apply(X, MARGIN, FUN, ...)
X:数组、矩阵、数据框
MARGIN: 按行计算或按按列计算,1表示按行,2表示按列
FUN: 自定义的调用函数
…: 更多参数,可选
x<-matrix(1:12,ncol=3)
apply(x,1,sum)
[1] 15 18 21 24
apply的计算顺序

自定义函数
一个自变量

和sqrt函数一样,MyFunction也是一个应用在单一元素(数值)上的函数。和之前sqrt函数一样,向量的定义为计算结果的排列方式,我们只需要更改函数的书写方法。将sqrt变为 function(x) MyFunction(x)。这一写法翻译成中文是,应用一个自变量为x的函数,这个函数(我之前定义过,起了名字)叫MyFunction,矩阵里的每一个元素(按照运算顺序)都是x。

两个自变量
那么,如果这个函数有两个自变量呢?我们定义第二个函数,有两个自变量x和y的MyFunction2。不要看到y就觉得是运算结果呀,只要在定义函数的时候把y放到function后面的括号内,y也可以是自变量。我们的MyFunction2函数定义为:

首先,我们假设数据矩阵对应的是自变量x,同时另一个自变量y为数值3。在这种情况下,向量值依然判定运算结果的排列方式,同时设置MyFunction2为对于x的函数,写为function(x) MyFunction (x,3)。来看看R中对两个向量值分别的运算结果。

第二种情况是,我们数据矩阵的数值对应的是自变量y,同时另一个自变量x数值为3。这时,我们需要告诉apply函数,现在自变量是y了。写为function (y) MyFunction(3,y)。从这个写法上可以看出,function定义了,在多元函数情况下,数据矩阵的自变量对应位置。来看看改变自变量定义后apply函数的运算结果:

网友评论