apply
apply 函数将一个函数应用到矩阵或数组的某个边际( margin )或维度上。例如,计算
矩阵每一行的和,因为行是矩阵的第 1 个维度,所以我们指定 MARGIN = 1 ,这样就可以
在每次迭代中,将 sum( )函数应用到矩阵的每个行切片(数值向量)上:
mat <- matrix(c(1, 2, 3, 4), nrow = 2)
mat
## [,1] [,2]
## [1,] 1 3
## [2,] 2 4
apply(mat, 1, sum)
## [1] 4 6
同理,若要计算每一列的和,列是矩阵的第 2 个维度,我们指定 MARGIN = 2 ,这样
每次迭代中,sum( )函数就被应用到矩阵 mat 的每个列切片上:
apply(mat, 2, sum)
## [1] 3 7
apply( )函数也支持数组输入和矩阵输出:
mat2 <- matrix(1:16, nrow = 4)
mat2
## [,1] [,2] [,3] [,4]
## [1,] 1 5 9 13
## [2,] 2 6 10 14
## [3,] 3 7 11 15
## [4,] 4 8 12 16
运行下列代码,得到一个展示 mat2 每一列的最大值和最小值的矩阵:
apply(mat2, 2, function(col) c(min = min(col), max = max(col)))
## [,1] [,2] [,3] [,4]
## min 1 5 9 13
## max 4 8 12 16
类似地,也可以运行以下代码,得到一个展示 mat2 每一行的最大值和最小值的
矩阵:
apply(mat2, 1, function(col) c(min = min(col), max = max(col)))
## [,1] [,2] [,3] [,4]
## min 1 2 3 4
## max 13 14 15 16