R语言如何将列表内的非矩阵计算结果还原为5x5矩阵
问题描述
你现在有两个矩阵列表,每个列表包含10个5×5矩阵,结构示例如下:
List 1: [[1]] A B C D E [1,] 1.0000000 2.0000000 1.0000000 2.0000000 1.0000000 [2,] 1.0000000 2.0000000 1.0000000 2.0000000 1.0000000 [3,] 1.0000000 2.0000000 1.0000000 2.0000000 1.0000000 [4,] 1.0000000 2.0000000 1.0000000 2.0000000 1.0000000 [5,] 1.0000000 2.0000000 1.0000000 2.0000000 1.0000000 ..... [[10]] A B C D E [1,] 7.0000000 3.0000000 5.0000000 2.0000000 1.0000000 [2,] 7.0000000 3.0000000 5.0000000 2.0000000 1.0000000 [3,] 7.0000000 3.0000000 5.0000000 2.0000000 1.0000000 [4,] 7.0000000 3.0000000 5.0000000 2.0000000 1.0000000 [5,] 7.0000000 3.0000000 5.0000000 2.0000000 1.0000000 List 2: [[1]] A B C D E [1,] 2.0000000 2.0000000 2.0000000 2.0000000 2.0000000 [2,] 2.0000000 2.0000000 2.0000000 2.0000000 2.0000000 [3,] 2.0000000 2.0000000 2.0000000 2.0000000 2.0000000 [4,] 2.0000000 2.0000000 2.0000000 2.0000000 2.0000000 [5,] 2.0000000 2.0000000 2.0000000 2.0000000 2.0000000 ..... [[10]] A B C D E [1,] 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 [2,] 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 [3,] 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 [4,] 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 [5,] 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000
你之前使用如下代码对两个列表对应位置的矩阵求和:
lapply(seq_along(List1),function(i) unlist(List1[i])+unlist(List2[i]))
得到的结果是一维带命名的向量,不再是矩阵格式:
Result: [[1]] A1 A2 A3 A4 B1 B2 B3 B4 C1 C2 C3 C4 D1 D2 D3 D4 E1 E2 E3 E4 3 3 3 3 4 4 4 4 3 3 3 3 4 4 4 4 3 3 3 3 ... [[10]] A1 A2 A3 A4 B1 B2 B3 B4 C1 C2 C3 C4 D1 D2 D3 D4 E1 E2 E3 E4 8 8 8 8 4 4 4 4 6 6 6 6 3 3 3 3 2 2 2 2
现在需要将这些向量还原为矩阵格式,支持后续导出CSV的需求。
解决方法
方案1:修改求和逻辑,直接生成矩阵列表(最优方案)
你之前的结果变成向量是因为调用了unlist,且用[i]取列表元素返回的是子列表而非矩阵本身,直接修改代码即可一步得到矩阵结果:
result_mat_list <- lapply(seq_along(List1), function(i) { # 用[[i]]直接取出列表中的矩阵元素,直接相加即可保留矩阵格式 List1[[i]] + List2[[i]] })
方案2:已生成向量结果,转为矩阵
如果已经生成了向量格式的结果列表(假设命名为result_vec_list),可以按如下代码转换为矩阵:
result_mat_list <- lapply(result_vec_list, function(x) { # 按原5行5列的维度、R默认的按列填充规则重构矩阵 mat <- matrix(x, nrow = 5, ncol = 5, byrow = FALSE) # 还原原矩阵的列名 colnames(mat) <- c("A", "B", "C", "D", "E") return(mat) })
导出CSV示例
拿到矩阵列表后,可以批量导出为CSV文件:
for (idx in seq_along(result_mat_list)) { write.csv(result_mat_list[[idx]], file = paste0("求和矩阵_", idx, ".csv"), row.names = FALSE) }
内容的提问来源于stack exchange,提问作者HongH378
相关产品推荐
相关产品推荐

