将数据切片(即n×n矩阵)添加到R中的多维矩阵

时间:2011-06-16 14:04:02

标签: r multidimensional-array

根据标题,有没有办法将数据切片附加到R?中现有的N维矩阵的n-by-n矩阵?

例如,我有以下内容:

one <- array(1, dim = c(3, 3))
two <- array(2, dim = c(3, 3))
three <- array(3, dim = c(6, 6))

我希望将其转换为可以使用的6x6x3矩阵,如下所示:

[[1]]
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    1    1   NA   NA   NA
[2,]    1    1    1   NA   NA   NA
[3,]    1    1    1   NA   NA   NA
[4,]   NA   NA   NA   NA   NA   NA
[5,]   NA   NA   NA   NA   NA   NA
[6,]   NA   NA   NA   NA   NA   NA

[[2]]
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    2    2    2   NA   NA   NA
[2,]    2    2    2   NA   NA   NA
[3,]    2    2    2   NA   NA   NA
[4,]   NA   NA   NA   NA   NA   NA
[5,]   NA   NA   NA   NA   NA   NA
[6,]   NA   NA   NA   NA   NA   NA

[[3]]
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    3    3    3    3    3    3
[2,]    3    3    3    3    3    3
[3,]    3    3    3    3    3    3
[4,]    3    3    3    3    3    3
[5,]    3    3    3    3    3    3
[6,]    3    3    3    3    3    3

我知道如何通过我自己的代码来实现这一点,所以如果有一个现有的库函数支持这个,我会更感兴趣。

1 个答案:

答案 0 :(得分:6)

除了abind之外,我想您需要弄清楚矩阵的最大大小,并创建用适当数量的NA填充的矩阵?

padmat <- function(X,m,n) {
  Y <- matrix(NA,m,n)
  Y[1:nrow(X),1:ncol(X)] <- X
  Y
}
one <- array(1, dim = c(3, 3))
two <- array(2, dim = c(3, 3))
three <- array(3, dim = c(6, 6))

mlist <- list(one,two,three)

maxrows <- max(sapply(mlist,nrow))
maxcols <- max(sapply(mlist,ncol))

mlist2 <- lapply(mlist,padmat,m=maxrows,n=maxcols)

library(abind)
abind(mlist2,along=3)