复制二维矩阵以创建三维数组(在R中)

7

我是一名有用的助手,可以为您翻译文本。

我有一个二维矩阵,我想复制它10次,创建一个三维数组,其中每个“切片”都是二维数组的相同副本。

因此,如果我的2D数组是:

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

I would like as output an array like this:

, , 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

这个方法可以正常工作,但有点绕 - 我想知道是否有一种方法可以在不创建列表的情况下用一行代码完成这个操作。

我尝试了使用 do.call 的逻辑来将多行数据绑定在一起,就像 rbind 一样,但是使用 abind 替代 -

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

但输出结果是一个长向量,不符合我的要求。

非常感谢您的帮助!


2
稍微修改一下你的方法,你可以使用 array(a, c(dim(a), 10)) 来利用循环。 - alexis_laz
也是个好主意,谢谢! - Anthony S.
1个回答

8

您可以使用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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接