将列表中未列出的矩阵转换回矩阵
Convert unlisted matrices within a list back to matrices
我有两个矩阵列表,每个列表由十个 5x5 矩阵组成:
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(见下文)对两个列表求和,得到了我想要的求和结果。但是,它们不再出现在我的新列表中的矩阵中。我如何将它们转换回来,以便我可以将它们作为矩阵导出到 CSV 中?
lapply 使用代码:
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
使用双括号,以便您实际添加矩阵(而不是使用 unlist 转换为向量的 1 矩阵列表):
lapply(seq_along(List1), function(i) List1[[i]] + List2[[i]])
另一种选择是使用 MAP
对两个列表的矩阵求和。
Map(`+`, List1, List2)
使用map2
library(purrr)
map2(List1, List2, `+`)
我有两个矩阵列表,每个列表由十个 5x5 矩阵组成:
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(见下文)对两个列表求和,得到了我想要的求和结果。但是,它们不再出现在我的新列表中的矩阵中。我如何将它们转换回来,以便我可以将它们作为矩阵导出到 CSV 中?
lapply 使用代码:
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
使用双括号,以便您实际添加矩阵(而不是使用 unlist 转换为向量的 1 矩阵列表):
lapply(seq_along(List1), function(i) List1[[i]] + List2[[i]])
另一种选择是使用 MAP
对两个列表的矩阵求和。
Map(`+`, List1, List2)
使用map2
library(purrr)
map2(List1, List2, `+`)