复制2维矩阵以创建3维数组(在R中)

Ant*_* S. 6 arrays r matrix

我有一个二维矩阵,我想复制10次以创建一个三维数组,其中数组的每个"切片"是二维数组的相同副本.

所以,如果我的2D阵列是:

a <- matrix(c(1:4),nrow=2)
> a
     [,1] [,2]
[1,]    1    2
[2,]    3    4
Run Code Online (Sandbox Code Playgroud)

我想输出像这样的数组:

, , 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
Run Code Online (Sandbox Code Playgroud)

我已经看到了这个页面(复制矩阵到表格列表),其中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
Run Code Online (Sandbox Code Playgroud)

这工作正常,但它有点迂回 - 我想知道是否有一种方法可以在一行中完成此操作而无需创建列表.

我试着用rbind的方式应用do.call的逻辑来将多个行绑定在一起,但是使用abind代替 -

do.call(abind,as.list(c(a,a,a,a,a,a,a,a,a,a))) 
Run Code Online (Sandbox Code Playgroud)

但输出是一个长矢量,所以不是我想要的.

任何帮助是极大的赞赏!

lmo*_*lmo 5

您可以使用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
Run Code Online (Sandbox Code Playgroud)