矩阵列表中的 rbind 矩阵

rbind matrices from a list of a list of matrices

我有一个 listlist 矩阵。每个 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,这样我就可以得到 listmatrices

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