R语言apply族函数详解

        在R语言中,apply系列函数的基本作用是对数组(array,可以是多维)或者列表(list)按照元素或元素构成的子集合进行迭代,并将当前元素或子集合作为参数调用某个指定函数。apply族函数分别有apply函数,tapply函数,lapply函数,mapply函数。每一个函数都有自己的特点,在处理不同类型的数据可以选用相对应的函数。apply族函数分别有apply函数,tapply函数,lapply函数,mapply函数。每一个函数都有自己的特点,在处理不同类型的数据可以选用相对应的函数。

1、 apply函数

      apply函数只能用于处理矩阵类型的数据,也就是说所有的数据必须是同一类型。因此要使用apply函数的话,需要将数据类型转换成矩阵类型。

apply函数一般有三个参数,第一个参数代表矩阵对象,第二个参数代表要操作矩阵的维度,1表示对行进行处理,2表示对列进行处理。第三个参数就是处理数据的函数。apply会分别一行或一列处理该矩阵的数据。

 

a<-matrix(1:12,nrow=3)
a
#求每列的平均值
apply(a,2,mean)

其中a是一个3*4的矩阵,如下。运行结果为 2  5  8 11

     [,1] [,2] [,3] [,4]
[1,]    1    4    7   10
[2,]    2    5    8   11
[3,]    3    6    9   12

       我们也可以使用colMeans()rowMeans( ),对矩阵的列和行分别求平均值,rowSums( ),colSums(),,对矩阵的列和行分别求和。

如过数据中NA,那么在求行列的平均值或和的时候,NA所在的行列的计算结果也没NA

apply(a,1,mean,na.rm=TRUE)

这样的话,它会自动忽略NA,只计算其他不是NA的值。rowMeans( )中也可以添加na.rm=TRUE参数。效果相同。

#矩阵中添加了一个na
a[2,1]<-NA
#不计算NA存在的那一行或那一列
apply(a,1,mean)

这个时候矩阵为

     [,1] [,2] [,3] [,4]
[1,]    1    4    7   10
[2,]   NA    5    8   11
[3,]    3    6    9   12

     结果为[1] 5.5  NA 7.5。如果代码写成下面这个样子

apply(a,1,mean,na.rm=TRUE)
结果为 5.5 8.0 7.5

2、lapplysapply函数

       lapply和sapply函数可以用于处理列表数据和向量数据(vector/list)。lapply函数得到处理得到的数据类型是列表,而sapply函数得到处理的数据类型是向量。这两个函数除了在返回值类型不同外,其他方面基本完全一样。

 

3、tapply函数

       它通常会有三个参数,第一个参数代表数据,第二个参数表示如何对数据进行分组操作,第三个参数指定每一个分组内应用什么函数。也就是说tapply函数就是把数据按照一定方式分成不同的组,再在每一组数据内进行某种运算。

4、mapply函数

         mapply函数主要是对多个列表或者向量参数使用函数


补充与:2017年1月8日

 函数名称

     使用对象

   返回结果

apply()

 对矩阵,数组或者数据框    

 向量,数组或者列表

lapply()

 对列表,数据框或者向量

 列表

sapply()

 对列表,数据框或者向量 

 向量,数组或列表

tapply()

 对不规则阵列

 阵列

mapply()

 对多个列表或者向量参数

 列表



你可能感兴趣的:(R语言)