我有一个二维矩阵,我想复制10次以创建一个三维数组,其中数组的每个“切片”都是二维数组的相同副本。
所以,如果我的2D阵列是:
a <- matrix(c(1:4),nrow=2)
> a
[,1] [,2]
[1,] 1 2
[2,] 3 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
这很好但是它有点迂回 - 我想知道是否有一种方法可以在一行中完成此操作而无需创建列表。
我尝试以rbind的方式应用do.call的逻辑来将多行绑定在一起,但是使用abind代替 -
do.call(abind,as.list(c(a,a,a,a,a,a,a,a,a,a)))
但是输出是一个长向量,所以不是我想要的。
非常感谢任何帮助!
答案 0 :(得分:5)
您可以使用replicate
,默认情况下会生成一个列表。要获取数组,请添加simplify =&#34; array&#34;。
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