R语言 如何将这个列表转换为数组?

xzv2uavs  于 2023-03-27  发布在  其他
关注(0)|答案(2)|浏览(368)

如何转换下面的列表列表

n = 10
m = 10
p = 5

l = list()
for(i in 1:m) {
  l[[i]] = list(
    X = matrix(rnorm(n * p), nrow = n),
    Y = matrix(rnorm(n * p), nrow = n)
  )
}

其中第三个索引表示X和Y之间的分隔,而dataframe和list组件的列合并到最终数组的列中。

ghhaqwfi

ghhaqwfi1#

这应该行得通:

ar <- sapply(Reduce(\(a, b) lapply(seq_along(a), \(i) cbind(a[[i]], b[[i]])), l), 
             identity, simplify='array')
dim(ar)
# [1] 10 50  2

它连续地cbind将X和Y矩阵放在一起,然后使用sapplyidentity函数将结果列表转换为数组。

7jmck4yq

7jmck4yq2#

有什么特别的原因需要使用列表吗?你也可以预先分配一个数组并填充它:

m <- n <- 10
p <- 5
ret_array <- array(dim = c(n, m * p, 2))

for(i in 1:m) {
  ret_array[, seq_len(p) + p * (i - 1), 1] <- matrix(rnorm(n * p), nrow = n)
  ret_array[, seq_len(p) + p * (i - 1), 2] <- matrix(rnorm(n * p), nrow = n)
}

相关问题