了解数组上的apply 的最简单方法是尝试一些示例。这是从上一个示例对象in the documentation修改的一些数据:
> z <- array(1:24, dim = 2:4)
> dim(z)
[1] 2 3 4
> apply(z, 1, function(x) sum(x))
[1] 144 156
> apply(z, 2, function(x) sum(x))
[1] 84 100 116
> apply(z, 3, function(x) sum(x))
[1] 21 57 93 129
这里发生了什么?好吧,我们创建一个三维数组z。如果你使用apply 和MARGIN=1 你会得到行总和(两个值,因为有两行),如果你使用MARGIN=2 你会得到列总和(三个值,因为有三列),如果你使用@987654328 @ 你得到数组第三维的总和(四个值,因为数组的第三维有四个级别)。
如果你为MARGIN 指定一个向量,比如c(2,3),你会得到每一列和第三维级别的行总和。请注意,在上面的示例中,apply 和 MARGIN=1 的结果是行和,MARGIN=2 分别是下面结果中矩阵的列和:
> apply(z, c(2,3), function(x) sum(x))
[,1] [,2] [,3] [,4]
[1,] 3 15 27 39
[2,] 7 19 31 43
[3,] 11 23 35 47
如果您将所有维度指定为MARGIN=c(1,2,3),您只需获得原始的三维对象:
> all.equal(z, apply(z, c(1,2,3), function(x) sum(x)))
[1] TRUE
在这里学习的最好方法就是开始玩一些真实的矩阵。您的示例数据对于查看总和没有帮助,因为所有数组条目都为零。