如何将嵌套列表转换为维度为c(n, m*p, 2)的数组?
如何将嵌套列表转换为指定维度的数组?
首先看你生成嵌套列表的代码:
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) ) }
要将其转换为维度c(n, m * p, 2)的数组,可按以下方式实现:
# 设置随机种子确保结果可复现(可选) set.seed(123) # 提取所有X矩阵并按列拼接 X_combined = do.call(cbind, lapply(l, function(item) item$X)) # 提取所有Y矩阵并按列拼接 Y_combined = do.call(cbind, lapply(l, function(item) item$Y)) # 组合为目标数组 target_array = array(c(X_combined, Y_combined), dim = c(n, m*p, 2)) # 验证维度是否符合要求 dim(target_array) # 输出结果:10 50 2
代码说明:
lapply(l, function(item) item$X):遍历嵌套列表l,逐个提取每个子列表中的X矩阵,得到一个包含m个矩阵的列表do.call(cbind, ...):将这m个矩阵按列方向拼接,形成n行、mp列的大矩阵(每个原矩阵有p列,m个就是mp列)array(c(X_combined, Y_combined), dim = c(n, m*p, 2)):把拼接好的X和Y矩阵按顺序转为向量,再重构为指定维度的数组,第三维度的第1个位置对应X数据,第2个位置对应Y数据
内容的提问来源于stack exchange,提问作者Mr Frog
相关产品推荐
相关产品推荐

