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
這個數組(或矩陣情況下的轉置)。
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
有可能是更優雅的方式做最後一個我不知道。