从R中的不同子列表长度的嵌套列表中提取所有矩阵

时间:2016-09-07 15:03:19

标签: arrays r list matrix

我有一个嵌套的矩阵列表。更具体地说,我有一个矩阵列表列表,每个列表都有可变数量的矩阵。我想将嵌套列表中的所有矩阵提取到一个简单的数组中。

示例数据('datlist'):

set.seed(10)
dat <- rnorm(n=3*4*6)
datmat <- array(dat, dim = c(3,4,6))
datlist <- list()
datlist[[1]] <- list() # datmat[,,1]
datlist[[1]][[1]] <- datmat[,,1] 
datlist[[1]][[2]] <- datmat[,,2] 
datlist[[1]][[3]] <- datmat[,,3] 
datlist[[2]] <- list()
datlist[[2]][[1]] <- datmat[,,4]
datlist[[2]][[2]] <- datmat[,,5]
datlist[[3]] <- list()
datlist[[3]][[1]] <- datmat[,,6]

summary(datlist)

# Length Class  Mode
# [1,] 3      -none- list
# [2,] 2      -none- list
# [3,] 1      -none- list

这里的理想输出是我用于创建示例的上述'datmat'数组。

根据类似问题的答案,似乎应用函数在这里应该有用,但我没有设法让它们做我想做的事。

我尝试了以下for循环但没有成功:

  nmats <- sum(as.numeric(summary(datlist)[,1])) # total number of matrices
  mats <- array(data = 0, dim = c(3, 4, nmats))
  for (m in 1:nmats){
    for (i in 1:length(datlist)) {
      for (j in 1:length(datlist[[i]])) {
        mats[,,m] <- datlist[[i]][[j]]
       }
     }
   }

'mat'数组中的所有6个矩阵仅由最后一个矩阵填充,因此我的索引有些不对劲。我知道循环看起来不正确,但我不确定如何实现它。

无论如何,无论是循环工作还是更简洁的基于应用的解决方案都会很精彩。

0 个答案:

没有答案