我有一个 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
能做到吗?
最佳答案
您可以使用 transpose()
函数来自 purrr
包将列表翻过来,以便每个子列表包含您要绑定(bind)在一起的所有矩阵,然后您可以简单地遍历结果列表和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
或者您可以使用
Map
从基础 R:mat.list.2 <- do.call(Map, c(f = rbind, mat.lol))
identical(mat.list, mat.list.2)
# [1] TRUE
关于rbind 矩阵列表中的矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41317962/