我有一个嵌套的矩阵列表。更具体地说,我有一个矩阵列表列表,每个列表都有可变数量的矩阵。我想将嵌套列表中的所有矩阵提取到一个简单的数组中。
示例数据('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个矩阵仅由最后一个矩阵填充,因此我的索引有些不对劲。我知道循环看起来不正确,但我不确定如何实现它。
无论如何,无论是循环工作还是更简洁的基于应用的解决方案都会很精彩。