如何将 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.table
的 rbindlist
,如下所示:
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))
})
}))
}))
比如说,我有一个向量和一个带有一个参数的函数,其中 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.table
的 rbindlist
,如下所示:
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))
})
}))
}))