rbind 多个数据帧列表到一个列表中
rbind multiple lists of dataframes into a list
我正在寻找一种将多个数据框列表附加到单个列表中的更优雅或更有效的解决方案。为简单起见,假设我们处理以下情况:
my_func <- function(i) {
# function to generate a list with two data frames
head(cars, i * 5) -> df1
head(iris, i * 5) -> df2
return(list(df1, df2))
}
假设我们要执行函数 my_func
三次并且 rbind
列表中的结果:
#output
Map(rbind, my_func(1), my_func(2), my_func(3)) -> out
#this would not be so elegant if we have to run the function many times.
#or
for (i in 1:3) {
if (i == 1) {
out <- my_func(i)
} else {
out <- Map(rbind, out, my_func(i))
}
}
我不是在寻找这样的东西:
do.call(rbind, lapply(1:3, function(i) my_func(i)[[1]]))
do.call(rbind, lapply(1:3, function(i) my_func(i)[[2]]))
我希望最终输出为包含附加数据帧的列表。
谢谢。
一种tidyverse
方式是-
library(dplyr)
library(purrr)
map(1:3, my_func) %>% transpose() %>% map(bind_rows)
#[[1]]
# speed dist
#1 4 2
#2 4 10
#3 7 4
#4 7 22
#5 8 16
#6 4 2
#7 4 10
#8 7 4
#...
#...
#[[2]]
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#1 5.1 3.5 1.4 0.2 setosa
#2 4.9 3.0 1.4 0.2 setosa
#3 4.7 3.2 1.3 0.2 setosa
#4 4.6 3.1 1.5 0.2 setosa
#5 5.0 3.6 1.4 0.2 setosa
#6 5.1 3.5 1.4 0.2 setosa
#...
#...
我们可以使用
map(1:3, my_func) %>%
transpose %>%
lapply(bind_rows)
我正在寻找一种将多个数据框列表附加到单个列表中的更优雅或更有效的解决方案。为简单起见,假设我们处理以下情况:
my_func <- function(i) {
# function to generate a list with two data frames
head(cars, i * 5) -> df1
head(iris, i * 5) -> df2
return(list(df1, df2))
}
假设我们要执行函数 my_func
三次并且 rbind
列表中的结果:
#output
Map(rbind, my_func(1), my_func(2), my_func(3)) -> out
#this would not be so elegant if we have to run the function many times.
#or
for (i in 1:3) {
if (i == 1) {
out <- my_func(i)
} else {
out <- Map(rbind, out, my_func(i))
}
}
我不是在寻找这样的东西:
do.call(rbind, lapply(1:3, function(i) my_func(i)[[1]]))
do.call(rbind, lapply(1:3, function(i) my_func(i)[[2]]))
我希望最终输出为包含附加数据帧的列表。
谢谢。
一种tidyverse
方式是-
library(dplyr)
library(purrr)
map(1:3, my_func) %>% transpose() %>% map(bind_rows)
#[[1]]
# speed dist
#1 4 2
#2 4 10
#3 7 4
#4 7 22
#5 8 16
#6 4 2
#7 4 10
#8 7 4
#...
#...
#[[2]]
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#1 5.1 3.5 1.4 0.2 setosa
#2 4.9 3.0 1.4 0.2 setosa
#3 4.7 3.2 1.3 0.2 setosa
#4 4.6 3.1 1.5 0.2 setosa
#5 5.0 3.6 1.4 0.2 setosa
#6 5.1 3.5 1.4 0.2 setosa
#...
#...
我们可以使用
map(1:3, my_func) %>%
transpose %>%
lapply(bind_rows)