如何转换下面的列表列表
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组件的列合并到最终数组的列中。
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矩阵放在一起,然后使用sapply和identity函数将结果列表转换为数组。
cbind
sapply
identity
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) }
2条答案
按热度按时间ghhaqwfi1#
这应该行得通:
它连续地
cbind
将X和Y矩阵放在一起,然后使用sapply
和identity
函数将结果列表转换为数组。7jmck4yq2#
有什么特别的原因需要使用列表吗?你也可以预先分配一个数组并填充它: