【问题标题】:rbind matrices from a list of a list of matricesrbind 矩阵列表中的矩阵
【发布时间】:2017-05-10 03:13:34
【问题描述】:

我有一个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 以便我最终得到 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 是什么?

【问题讨论】:

  • lapply(mat.lol, function(x) Reduce(rbind,x)).

标签: r list apply


【解决方案1】:

您可以使用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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-03
    • 2014-03-22
    • 2014-02-08
    • 1970-01-01
    相关资源
    最近更新 更多