在嵌套列表中的矩阵上使用 rbind?
Using rbind on matrices in nested lists?
我在 R 中工作,我有一个数据集,它是矩阵列表的列表。主列表中的每个子列表都有两个等维矩阵(10 行 x 2 列)。我想 rbind()
每个矩阵列表变成一个矩阵(20 行 x 2 列)。但我不想将每个子列表组合成一个大矩阵。我会尽力为其编写示例代码,但实际数据非常复杂,所以我会尽力而为。
> matrix_1 <- matrix(c(1, 2, 3, 4, 5, 6, 7, 8, 9), nrow = 5, ncol = 2, byrow = TRUE)
> matrix_2 <- matrix(c(9, 8, 7, 6, 5, 4, 3, 2, 1), nrow = 5, ncol = 2, byrow = TRUE)
> matrix_3 <- matrix(c(101, 91, 81, 71, 61, 51, 41, 31, 21, 11), nrow = 5, ncol = 2, byrow = TRUE)
> matrix_4 <- matrix(c(22, 20, 19, 18, 17, 16, 15, 14, 13, 12), nrow = 5, ncol = 2, byrow = TRUE)
> sublist_1 <- list(matrix_1, matrix_2)
[[1]]
[,1] [,2]
[1,] 1 5
[2,] 2 6
[3,] 1 3
[4,] 7 4
[5,] 8 3
[[2]]
[,1] [,2]
[1,] 10 9
[2,] 8 7
[3,] 6 5
[4,] 4 3
[5,] 2 1
> sublist_2 <- list(matrix_3, matrix_4)
[[1]]
[,1] [,2]
[1,] 101 91
[2,] 81 71
[3,] 61 51
[4,] 41 31
[5,] 21 11
[[2]]
[,1] [,2]
[1,] 22 20
[2,] 19 18
[3,] 17 16
[4,] 15 14
[5,] 13 12
> mainlist <- list(sublist_1, sublist_2)
我真正想要的是做这个:
> rbind(sublist_1[[1]], sublist_1[[2]])
[,1] [,2]
[1,] 1 5
[2,] 2 6
[3,] 1 3
[4,] 7 4
[5,] 8 3
[6,] 10 9
[7,] 8 7
[8,] 6 5
[9,] 4 3
[10,] 2 1
适用于主列表中的所有子列表。
我尝试使用 lapply
、mapply
、map
、do.call
等的各种组合来使其工作,但要么我不不知道正确的组合,或者我需要其他东西。
我还注意到 rbind(sublist_1)
不起作用,这使得 lapply
难以使用。必须写成rbind(sublist_1[[1]], sublist_1[[2]])
.
非常感谢您的帮助。
循环外部 list
,将内部 list
元素转换为 data.frame 并使用 do.call
和 rbind
out <- lapply(mainlist, function(x) do.call(rbind, lapply(x, as.data.frame)))
我在 R 中工作,我有一个数据集,它是矩阵列表的列表。主列表中的每个子列表都有两个等维矩阵(10 行 x 2 列)。我想 rbind()
每个矩阵列表变成一个矩阵(20 行 x 2 列)。但我不想将每个子列表组合成一个大矩阵。我会尽力为其编写示例代码,但实际数据非常复杂,所以我会尽力而为。
> matrix_1 <- matrix(c(1, 2, 3, 4, 5, 6, 7, 8, 9), nrow = 5, ncol = 2, byrow = TRUE)
> matrix_2 <- matrix(c(9, 8, 7, 6, 5, 4, 3, 2, 1), nrow = 5, ncol = 2, byrow = TRUE)
> matrix_3 <- matrix(c(101, 91, 81, 71, 61, 51, 41, 31, 21, 11), nrow = 5, ncol = 2, byrow = TRUE)
> matrix_4 <- matrix(c(22, 20, 19, 18, 17, 16, 15, 14, 13, 12), nrow = 5, ncol = 2, byrow = TRUE)
> sublist_1 <- list(matrix_1, matrix_2)
[[1]]
[,1] [,2]
[1,] 1 5
[2,] 2 6
[3,] 1 3
[4,] 7 4
[5,] 8 3
[[2]]
[,1] [,2]
[1,] 10 9
[2,] 8 7
[3,] 6 5
[4,] 4 3
[5,] 2 1
> sublist_2 <- list(matrix_3, matrix_4)
[[1]]
[,1] [,2]
[1,] 101 91
[2,] 81 71
[3,] 61 51
[4,] 41 31
[5,] 21 11
[[2]]
[,1] [,2]
[1,] 22 20
[2,] 19 18
[3,] 17 16
[4,] 15 14
[5,] 13 12
> mainlist <- list(sublist_1, sublist_2)
我真正想要的是做这个:
> rbind(sublist_1[[1]], sublist_1[[2]])
[,1] [,2]
[1,] 1 5
[2,] 2 6
[3,] 1 3
[4,] 7 4
[5,] 8 3
[6,] 10 9
[7,] 8 7
[8,] 6 5
[9,] 4 3
[10,] 2 1
适用于主列表中的所有子列表。
我尝试使用 lapply
、mapply
、map
、do.call
等的各种组合来使其工作,但要么我不不知道正确的组合,或者我需要其他东西。
我还注意到 rbind(sublist_1)
不起作用,这使得 lapply
难以使用。必须写成rbind(sublist_1[[1]], sublist_1[[2]])
.
非常感谢您的帮助。
循环外部 list
,将内部 list
元素转换为 data.frame 并使用 do.call
和 rbind
out <- lapply(mainlist, function(x) do.call(rbind, lapply(x, as.data.frame)))