如何将lapply的结果与data.frame结合起来?

时间:2015-02-22 12:16:48

标签: r dplyr

说,我有一个向量和一个带有一个参数的函数,它返回一个data.frame。 我想将函数应用于向量的每个元素,并将结果组合到一个大数据框架。

我已经使用lapply和rbind获得了下面的工作命令。但它看起来有点“不自然”。有更好,更清晰的方式吗? 我对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))))

3 个答案:

答案 0 :(得分:11)

尝试

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

答案 1 :(得分:2)

您还可以使用data.table&#39; rbindlist,如下所示:

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

如果没有setDF rbindlist,则会返回data.table而不是data.frame

答案 2 :(得分:0)

嵌套列表的解决方案:

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