R - do.call(rbind,...) 的预期速度

R - Expected speed of do.call(rbind,...)

我有一个名为 prebindgames 的列表,其中包含超过 200 万个条目。每个列表条目都是一个包含 6 列的单行数据框。为了了解每一列中的数据类型,每个数据框的形式为:

data.frame(Time = double(),
           HScore = numeric(),
           AScore = numeric(),
           HTeam = character(),
           ATeam = character(),
           GameID = character(),
           stringsAsFactors = FALSE)

数字列不超过千位,字符列不超过10个字符。我尝试了 运行 do.call(rbind, prebindgames),它 运行 一夜之间没有停止的迹象。我再次尝试了一些较小的值:

start_time <- Sys.time()
allgamespbp <- do.call(rbind, prebindgames[1:1000]) 
end_time <- Sys.time()
print(end_time - start_time)
Time difference of 1.059694 secs

prebindgames[1:10000]
Time difference of 11.00168 secs

prebindgames[1:20000]
Time differences of 37.30913 secs

所以我已经看到一些指数级的增长,这可以解释为什么当试图在一次调用中绑定所有 200 万时事情会失控。所以我的三个问题是:

1) 这正常吗?如果我将我的预期速度基于具有 10,000 个条目的列表,那么 200 万

只需要大约 40 分钟

2) 我可以做些什么来加快这个过程?据我所知,替换设置长度列表中的值然后使用 do.call 是将行绑定在一起的最有效方法。

3) 如果这是在不对我的代码或设备进行重大更改的情况下合理获得的最快速度,我可以修改它以查看我的进度吗?

背景:这是一个网络抓取项目,我会将许多 NBA 比赛的得分合并到一个大 table 中。完整的代码可以在这里找到:https://github.com/NicholasHassan/NBAComeback

好奇的话可以跳到NBA Comeback.R第54行,用pbpurls.csv看看抓取过程是怎样的

这听起来像是 data.table 可以显着(100-1000 倍)更快的场景。

https://www.r-bloggers.com/concatenating-a-list-of-data-frames/

Is there a higher order replacement for do.call(rbind, ...)?

想知道如果您将上面的内容替换为:

,您的基准会说什么
allgamespbp <- data.table::rbindlist(prebindgames[1:1000])