R语言提供了批量处理函数,可以循环遍历某个集合内的所有或部分元素,以简化操作。
这些函数底层是通过C来实现的,所以效率也比手工遍历来的高效。
批量处理函数有很重要的apply族函数:lapply sapply apply tapply mapply。apply族函数是高效能计算的运算向量化(Vectorization)实现方法之一,比起传统的for,while常常能获得更好的性能。
- apply : 用于遍历数组中的行或列,并且使用指定函数来对其元素进行处理。
- lapply : 遍历列表向量内的每个元素,并且使用指定函数来对其元素进行处理。返回列表向量。
- sapply : 与lapply基本相同,只是对返回结果进行了简化,返回的是普通的向量。
- mapply: 支持传入两个以上的列表。
- tapply: 接入参数INDEX,对数据分组进行运算,就和SQL中的group by 一样。
apply函数
(1)行或列遍历操作函数apply,实现对一个数组按行或者按列进行计算
apply(X, MARGIN, FUN, ...)
参数:其中X为一个数组;MARGIN为一个向量(表示要将函数FUN应用到X的行还是列),若为1表示取行,为2表示取列,为c(1,2)表示行、列都计算。
示例代码:
X: an array, including a matrix.
MARGIN: 1:行操作; 2:列操作
FUN:函数名
用apply可以很方便地按行列求和/平均,其结果与colMeans,colSums,rowMeans,rowSums是一样的。
ma <- matrix(c(1:4, 1, 6:8), nrow = 2)
ma
[,1] [,2] [,3] [,4]
[1,] 1 3 1 7
[2,] 2 4 6 8
apply(ma, c(1,2), sum)
[,1] [,2] [,3] [,4]
[1,] 1 3 1 7
[2,] 2 4 6 8
apply(ma, 1, sum)
[1] 12 20
apply(ma,