如何将 lapply 的结果合并到 data.frame?

How to combine result of lapply to a data.frame?

比如说,我有一个向量和一个带有一个参数的函数,其中 returns 一个 data.frame。 我想将该函数应用于向量的每个元素并将结果合并为一个大 data.frame.

我使用 lapply 和 rbind 得到了下面的工作命令。不过在我看来有点"unnatural"。有没有更好,更清晰的方法? 我对 plyr 有一些想法,但我想避免使用 plyr,因为我想改用 dplyr。

 my_vector <- c(1,2,3)
 my_function <- function(a){
   unif <- runif(a)
   norm <- rnorm(a)
   return(data.frame(unif=unif, norm=norm))
 }

 as.data.frame(do.call(rbind,(lapply(my_vector, my_function))))

尝试

library(dplyr)
lapply(my_vector, my_function) %>% bind_rows()

您还可以使用 data.tablerbindlist,如下所示:

require(data.table)
df <- setDF(rbindlist(lapply(my_vector, my_function)))

没有 setDF rbindlist returns 一个 data.table 而不是 data.frame

嵌套列表的解决方案:

  result = bind_rows(lapply(list1, function(x) {
    bind_rows(lapply(list2, function(y) {
      lapply(list3, function(z) {
        read.delim(paste0(x, "_", y, "_", z))
      })
    }))
  }))