2016-06-21 61 views
3

我有一個二維矩陣,我想複製10次以創建一個三維數組,其中數組的每個'切片'是一個相同的副本二維數組。複製2維矩陣來創建一個3維數組(在R中)

所以,如果我的二維數組分別是:

a <- matrix(c(1:4),nrow=2) 
> a 
    [,1] [,2] 
[1,] 1 3 
[2,] 2 4 

我想作爲輸出像這樣的數組:

, , 1 

    [,1] [,2] 
[1,] 1 2 
[2,] 3 4 

, , 2 

    [,1] [,2] 
[1,] 1 2 
[2,] 3 4 

.... 

, , 10 

    [,1] [,2] 
[1,] 1 2 
[2,] 3 4 

我看到這個頁面(Duplicate matrix to form list),其中, OP正在尋找複製矩陣到一個列表,我改編然後轉換爲一個列表:

b<-rep(list(a), 10) # from original post 
array(unlist(b), dim = c(nrow(b[[1]]), ncol(b[[1]]), length(b))) # line I added 

This工作正常,但它有點迂迴 - 我想知道是否有辦法在一行內完成此操作,而無需通過創建列表。

我試圖施加在與rbind到多個行粘結在一起做的方式一個do.call的邏輯,但使用代替abind -

do.call(abind,as.list(c(a,a,a,a,a,a,a,a,a,a))) 

但輸出是一個長向量等不我在找什麼。

任何幫助,非常感謝!

+2

修改你的方法一點,你可以使用'陣列(A,C(點心(一),10))'以循環 –

+0

也是一個好主意的好處,謝謝! –

回答

3

您可以使用replicate,默認情況下會生成一個列表。要獲得數組,請添加simplify =「array」。

replicate(10, a, simplify="array") 

, , 1 

    [,1] [,2] 
[1,] 1 3 
[2,] 2 4 

, , 2 

    [,1] [,2] 
[1,] 1 3 
[2,] 2 4 

... 

, , 9 

    [,1] [,2] 
[1,] 1 3 
[2,] 2 4 

, , 10 

    [,1] [,2] 
[1,] 1 3 
[2,] 2 4