2016-06-21 289 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