R 中的数组由以下内容填充首先遍历第一维度。因此,首先遍历第一个维度,然后遍历第二个维度,然后遍历第三个维度(如果可用)。
如果是矩阵:
array(c(1,2,3), dim = c(3,3))
[,1] [,2] [,3]
[1,] 1 1 1
[2,] 2 2 2
[3,] 3 3 3
或者通过赋值:
M <- array(dim = c(3,3))
M[,] <- c(1,2,3)
M
[,1] [,2] [,3]
[1,] 1 1 1
[2,] 2 2 2
[3,] 3 3 3
分配给第二个维度很容易:
M <- array(dim = c(3,3))
M[,2:3] <- c(1,2,3)
M
[,1] [,2] [,3]
[1,] NA 1 1
[2,] NA 2 2
[3,] NA 3 3
但分配给第一维更加棘手。以下没有给出预期结果:
M <- array(dim = c(3,3))
M[2:3,] <- c(1,2,3)
M
[,1] [,2] [,3]
[1,] NA NA NA
[2,] 1 3 2
[3,] 2 1 3
通过首先遍历第一个维度,然后遍历第二个维度来填充数据。我们想要的是先穿越第二维度,然后才是第一维度。所以我们必须aperm https://stat.ethz.ch/R-manual/R-devel/library/base/html/aperm.html数组(或在矩阵的情况下转置)。
M <- array(dim = c(3,3))
Mt <- aperm(M)
Mt[,2:3] <- c(1,2,3)
M <- aperm(Mt)
M
[,1] [,2] [,3]
[1,] NA NA NA
[2,] 1 2 3
[3,] 1 2 3
也许有更优雅的方法来完成我不知道的最后一项。