来自矩阵列表的rbind矩阵

时间:2016-12-25 00:51:05

标签: r list apply

我有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 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]])) 的{​​{1}}:

apply

实现这一目标的function create_table()是什么?

1 个答案:

答案 0 :(得分:4)

你可以使用transpose()包中的purrr函数来将内容翻出来,这样每个子列表都包含你想要绑定在一起的所有矩阵,然后你可以简单地循环遍历结果列表和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