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