2014-05-01 110 views
2

我想做一些矩陣操作,最好使用3(或更高)的維數組。如果我想按行填充矩陣,則有參數(byrow = TRUE),但是不存在用於創建/填充多維陣列的參數。我能夠完成的唯一方法是使用aperm轉置一個由列填充的數組。例如:R按行填充數組

arr.1 <- array(1:12, c(3,2,2)) 

arr.1 

arr.2 <- aperm(arr.1, c(2,1,3)) 

arr.2 

產生正確的結果,一個由行填充的維度2,3,2數組。從Column x Row x Range數組返回到Row x Column x Range數組後,似乎有點反其道而行之。這可能是以前f77編碼的壞習慣,還是我忽略了一些簡單的東西?

回答

0

我的建議是通過運行

foo<- array(1:60,3,4,5) 「教」自己的默認順序然後,您可以通過重新排列源載體或通過建立矩陣並裝入的z層填充任意陣列按照所需順序排列數組。

0

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 

有可能是更優雅的方式做最後一個我不知道。