将嵌套列表合并到维护高阶列表结构的数据框中
Merge nested lists into a data frame maintaining higher order list structure
我有一个由嵌套列表组成的列表。这些嵌套列表中的每一个都包含共享相同列的数据框。我想合并每个嵌套列表中的数据框,维护高阶列表。
我已经尝试使用 lapply 和 do.call 来执行此操作,但是花费的时间太长了。事实上,我收到以下错误:
Error: vector memory exhausted (limit reached?)
my.list <- replicate(100, replicate(10, data.frame(a = 1:5, b = 6:10), simplify = F), simplify = F)
my.list <- lapply(my.list, function(l) do.call("rbind", l))
这正是我想要的数据结构,但是对于大数据来说运行速度太慢了。
另一种选择是将 purrr::map
与 dplyr::bind_rows
一起使用
library(purrr)
library(dplyr)
map(my.list, bind_rows)
这里是microbenchmark
不同方法的比较
library(purrr)
library(dplyr)
library(data.table)
library(microbenchmark)
res <- microbenchmark(
lapply_do_call_rbind = {
lapply(my.list, function(l) do.call("rbind", l))
},
map_bind_rows = {
map(my.list, bind_rows)
},
lapply_rbindlist = {
lapply(my.list, rbindlist)
}
)
#Unit: milliseconds
# expr min lq mean median uq
# lapply_do_call_rbind 46.104965 49.801469 54.567249 51.815901 54.085547
# map_bind_rows 3.257474 3.490079 4.055779 3.620804 4.002505
# lapply_rbindlist 9.446331 10.009678 11.429870 10.796956 12.252741
library(ggplot2)
autoplot(res)
我有一个由嵌套列表组成的列表。这些嵌套列表中的每一个都包含共享相同列的数据框。我想合并每个嵌套列表中的数据框,维护高阶列表。
我已经尝试使用 lapply 和 do.call 来执行此操作,但是花费的时间太长了。事实上,我收到以下错误:
Error: vector memory exhausted (limit reached?)
my.list <- replicate(100, replicate(10, data.frame(a = 1:5, b = 6:10), simplify = F), simplify = F)
my.list <- lapply(my.list, function(l) do.call("rbind", l))
这正是我想要的数据结构,但是对于大数据来说运行速度太慢了。
另一种选择是将 purrr::map
与 dplyr::bind_rows
library(purrr)
library(dplyr)
map(my.list, bind_rows)
这里是microbenchmark
不同方法的比较
library(purrr)
library(dplyr)
library(data.table)
library(microbenchmark)
res <- microbenchmark(
lapply_do_call_rbind = {
lapply(my.list, function(l) do.call("rbind", l))
},
map_bind_rows = {
map(my.list, bind_rows)
},
lapply_rbindlist = {
lapply(my.list, rbindlist)
}
)
#Unit: milliseconds
# expr min lq mean median uq
# lapply_do_call_rbind 46.104965 49.801469 54.567249 51.815901 54.085547
# map_bind_rows 3.257474 3.490079 4.055779 3.620804 4.002505
# lapply_rbindlist 9.446331 10.009678 11.429870 10.796956 12.252741
library(ggplot2)
autoplot(res)