一个正常的矩阵将是2维矩阵。 但是,我可以初始化:
a<-array(0,dim=c(2,3,4,5))
这是一个2 * 4 * 5 * 3矩阵或数组。
命令
apply(a,c(2,3),sum)
将给出一个4 * 5阵列,包含超过在第一和第四维中的元素的总和。
为什么呢? 据我所知,在apply
功能,1表示行,2表示列,但到底是什么意思3在这里?
我们在这里需要一些抽象。
一个正常的矩阵将是2维矩阵。 但是,我可以初始化:
a<-array(0,dim=c(2,3,4,5))
这是一个2 * 4 * 5 * 3矩阵或数组。
命令
apply(a,c(2,3),sum)
将给出一个4 * 5阵列,包含超过在第一和第四维中的元素的总和。
为什么呢? 据我所知,在apply
功能,1表示行,2表示列,但到底是什么意思3在这里?
我们在这里需要一些抽象。
最容易理解的方式apply
的阵列上是尝试一些例子。 下面是最后一个例子对象修改了一些数据的文件中 :
> 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
你列总和(三个值,因为有三列),如果你使用MARGIN=3
你获得跨阵列的第三维款项(四个值,因为有四个层次的数组的第三维)。
如果指定了一个矢量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
最好能在这里学到的办法就是开始玩弄一些真正的矩阵。 你的榜样数据并不在资金寻找,因为所有的数组项都是零很有帮助。