R语言基础—apply函数家族

R语言基础—apply函数家族

apply函数在我们平常的数据分析中具有重要的作用,其家族函数有以下几种:

各函数的用途如下表所示:

函数 用途
apply 遍历数组中的所有维度
lapply 遍历列表或向量的元素
sapply 遍历列表或向量的元素,然后简化输出
tapply 将函数运用与一个或多个因子的每个水平
mapply sapply的多元版本
rapply lapply的递归版本
eapply 运用函数遍历“环境”的具名元素
vapply 类似sapply,但可以设定返回值的类型。

主要为大家介绍前四种。

一、apply函数

apply()函数用于遍历数据对象的维度。其函数表达式为:apply(X, MARGIN, FUN, ...)

参数 意义
X 有维度的数据对象
MARGIN 在维度为2时,MARGIN=1表示对行进行运算,MARGIN=2时表示对列进行运算;维度为3及以上时,会对相应的维度数据进行操作
FUN 待运用的函数
其他参数

以下为示例:

在平常我们一般处理的时二维数据,因此掌握这些足够,这样我们是不是能很快速的算出我们想要的值,如我们想知道列变量:年龄、身高、体重等的均值,我们直接对数据进行列运算即可。

二、lapply函数

lapply函数指把FUN指定的函数运用于列表的每一个元素,并返回列表结构输出。其函数为:lapply(X, FUN, ...),其参数意义和apply函数一样只是没有MARGIN参数。

> #创建有三个元素的列表

> Ryuyan<-list(p1=c(1,2,3),p2=c(4,5,6),p3=c(7,8,9))

> Ryuyan

$p1

[1] 1 2 3

$p2

[1] 4 5 6

$p3

[1] 7 8 9

> #对列表的每一个元素求均值

> lapply(Ryuyan,mean)

$p1

[1] 2

$p2

[1] 5

$p3

[1] 8

> #对向量进行运算

> #以下结果等价于log(1)、log(2)、log(3)

> lapply(1:3,log)

[[1]]

[1] 0

[[2]]

[1] 0.6931472

[[3]]

[1] 1.098612

> #数据框其实是向量的列表,因此我们也可以对数据框进行操作

> #可以发现以下结果和上面的是一样的

> Ryuyan<-data.frame(p1=c(1,2,3),p2=c(4,5,6),p3=c(7,8,9))

> Ryuyan

p1 p2 p3

1 1 4 7

2 2 5 8

3 3 6 9

> lapply(Ryuyan,mean)

$p1

[1] 2

$p2

[1] 5

$p3

[1] 8

lapply函数和apply函数的区别是一个返回的是列表,一个返回的是向量。

三、sapply函数

sapply函数是经过简单包装的lapply函数,sapply函数可以运用于列表或向量。

同样使用上面的数据示例。

#单个值会输出成向量

> sapply(Ryuyan,mean)

p1 p2 p3

2 5 8

#多个值会输出成矩阵

> sapply(Ryuyan,quantile)

p1 p2 p3

0% 1.0 4.0 7.0

25% 1.5 4.5 7.5

50% 2.0 5.0 8.0

75% 2.5 5.5 8.5

100% 3.0 6.0 9.0

四、tapply函数

tapply函数按一个或多个因子的水平分类,把FUN指定的函数运用于每一个向量。其函数为:

tapply(X, INDEX, FUN = NULL, ..., default = NA, simplify = TRUE)

参数 意义
X 待汇总的数据,通常为一个向量
INDEX 一个因子或因子列表,数据根据此变量分组
FUN 指定使用的函数
其他参数

#根据性别来计算男女的平均年龄

> tapply(myR$age,INDEX=myR$sex,mean)

male female

62.22583 64.22572

#根据是否为糖尿病及性别来分组计算平均年龄

> tapply(myR$age,INDEX=list(myR$sex,myR$DB),mean)

No diabetes diabetes

male 61.89896 63.85306

female 63.64329 67.09174

以上为大家简单的介绍了apply函数家族,大家可以适当的掌握,很多数据的运算等我们介绍到数据处理时,会有更简单的方式计算!但这些函数是最基本的,有助于我们编写函数时来执行特定的计算!

原文见:

发布于 2021-04-28 10:13

文章被以下专栏收录