矩阵列表中的 rbind 矩阵
rbind matrices from a list of a list of matrices
我有一个 list
的 list
矩阵。每个 list
具有相同数量的 matrices
,其中每个 matrix
具有相同数量的列:
set.seed(1)
mat.lol <- list(list1=list(matrix(rnorm(100),ncol=10),matrix(rnorm(200),ncol=10),matrix(rnorm(140),ncol=10)),
list2=list(matrix(rnorm(80),ncol=10),matrix(rnorm(220),ncol=10),matrix(rnorm(110),ncol=10)),
list3=list(matrix(rnorm(300),ncol=10),matrix(rnorm(500),ncol=10),matrix(rnorm(650),ncol=10)))
我想 rbind
所有列表中的每个 matrix
i
,这样我就可以得到 list
的 matrices
:
mat.list <- list(rbind(mat.lol[[1]][[1]],mat.lol[[2]][[1]],mat.lol[[3]][[1]]),
rbind(mat.lol[[1]][[2]],mat.lol[[2]][[2]],mat.lol[[3]][[2]]),
rbind(mat.lol[[1]][[3]],mat.lol[[2]][[3]],mat.lol[[3]][[3]]))
实现该目标的 apply
function
是什么?
您可以使用 purrr
包中的 transpose()
函数来 将列表翻转过来 以便每个子列表包含您要绑定的所有矩阵在一起,然后你可以简单地遍历结果列表和 rbind
矩阵:
library(purrr)
mat.list.1 <- lapply(transpose(mat.lol), do.call, what=rbind)
identical(mat.list, mat.list.1)
# [1] TRUE
坚持使用 purrr
语法:
mat.list.3 <- transpose(mat.lol) %>% map(do.call, what=rbind)
identical(mat.list, mat.list.3)
# [1] TRUE
或者您可以使用基数 R:
中的 Map
mat.list.2 <- do.call(Map, c(f = rbind, mat.lol))
identical(mat.list, mat.list.2)
# [1] TRUE
我有一个 list
的 list
矩阵。每个 list
具有相同数量的 matrices
,其中每个 matrix
具有相同数量的列:
set.seed(1)
mat.lol <- list(list1=list(matrix(rnorm(100),ncol=10),matrix(rnorm(200),ncol=10),matrix(rnorm(140),ncol=10)),
list2=list(matrix(rnorm(80),ncol=10),matrix(rnorm(220),ncol=10),matrix(rnorm(110),ncol=10)),
list3=list(matrix(rnorm(300),ncol=10),matrix(rnorm(500),ncol=10),matrix(rnorm(650),ncol=10)))
我想 rbind
所有列表中的每个 matrix
i
,这样我就可以得到 list
的 matrices
:
mat.list <- list(rbind(mat.lol[[1]][[1]],mat.lol[[2]][[1]],mat.lol[[3]][[1]]),
rbind(mat.lol[[1]][[2]],mat.lol[[2]][[2]],mat.lol[[3]][[2]]),
rbind(mat.lol[[1]][[3]],mat.lol[[2]][[3]],mat.lol[[3]][[3]]))
实现该目标的 apply
function
是什么?
您可以使用 purrr
包中的 transpose()
函数来 将列表翻转过来 以便每个子列表包含您要绑定的所有矩阵在一起,然后你可以简单地遍历结果列表和 rbind
矩阵:
library(purrr)
mat.list.1 <- lapply(transpose(mat.lol), do.call, what=rbind)
identical(mat.list, mat.list.1)
# [1] TRUE
坚持使用 purrr
语法:
mat.list.3 <- transpose(mat.lol) %>% map(do.call, what=rbind)
identical(mat.list, mat.list.3)
# [1] TRUE
或者您可以使用基数 R:
中的Map
mat.list.2 <- do.call(Map, c(f = rbind, mat.lol))
identical(mat.list, mat.list.2)
# [1] TRUE