目录
一、apply()函数
二、sapply()函数
三、lapply()函数
四、tapply()函数
五、iris鸢尾花数据集
R语言提供了一个循环系统称apply家族,它具有类似for循环的功能,但是若想处理相同问题,apply家族函数好用太多了。
一、apply()函数
apply()函数主要功能是将所设定的函数应用到指定对象的每一行或列。它的基本使用格式如下:
apply(x,MARGIN,RUN,...)
x:要处理的对象,可以是矩阵、N维数组、数据框。
MARGIN:如果是矩阵则值为1或2,1代表每一行,2代表每一列。
FUN:要使用的函数。
...:FUN函数所需的额外参数。
二、sapply()函数
apply()函数尽管好用,但主要是用在矩阵、N为数组、数据框,若是面对向量,列表呢?此时可以使用sapply()(注:数据框数据也可用),此函数开头是s,是simplify的缩写,表示会对执行结果的对象进行简化。sapply()函数的使用格式如下:
sapply(x,FUN,...)
x:要处理的对象,可以是向量、数据框或列表。
FUN:要使用的函数。
...:FUN函数所需的额外参数。
sapply这个函数所返回的数据必要时皆会被简化,简化原则如下:
1.如果处理完列表、数据框或向量后,返回是一个数字,则返回结果会被简化为向量。
2.如果处理完列表、数据框后,返回的向量有相同的长度,则返回结果会被简化为矩阵。
3.如果是其他状况则返回是列表。
三、lapply()函数
lapply()函数的使用方法与sapply()函数几乎相同,但是lapply()函数的首字母l是list的缩写,表示lapply()函数所传回的是列表。lapply()函数的使用格式如下:
lapply(x,FUN,...)
x:可以是向量、数据框和列表。
FUN:预计使用的函数。
...:FUN函数所需的额外参数。
如果我们在sapply()函数内增加参数“simplify”,同时将它设为FALSE,则会获得与lapply()函数相同的返回结果。
四、tapply()函数
tapply()函数主要是用于一个因子或因子列表,执行指定的函数,最后获得汇总信息。
tapply()函数的使用格式如下:
tapply(x,INDEX,FUN,...)
x:是要处理的对象,通常是向量变量,也可是其他数据类型的数据。
INDEX:因子或分类的字符串向量或因子列表。
FUN:要使用的函数。
...:FUN函数所需的额外参数。
下面使用R语言内建的数据state.region,计算美国4大区包含的各州的数量。
使用R语言内建的数据state.region和state.x77,计算美国4大区百姓的平均收入。
五、iris鸢尾花数据集
iris中文是鸢尾花,这是系统内建的数据框数据集,内含150个记录,如下:
下面是前6个记录:
下面使用lapply()函数列出iris数据集的元素类型:
上述实例返回列表数据,而sapply()函数可以简化传回数据:
下面计算每字段的平均值:
上述实例虽然计算出来各字段的平均值,但出现了Warning message,主要是因为“Species”字段内容是因子,不是数值,为了解决这个问题,可以在sapply()函数内设计一个函数判别各字段是否是数值,如果不是则传回NA。
特别留意iris数据集的Species字段的数据是因子类型,所以可以使用tapply()函数执行各类数据运算。