我知道在stackoverflow上有很多关于如何使用do.call或ldply将数据框列表转换为单个数据框的问题,但这个问题是关于理解这两种方法的内部工作原理,并试图弄清楚为什么我无法使用它们来连接几乎1百万个具有相同结构、字段名称等的df的列表到一个单独的数据框中。每个数据框都是一行和21列。
这些数据最初是作为JSON文件开始的,我使用fromJSON将其转换为列表,然后又运行了一个lapply来提取列表的一部分并将其转换为data.frame,最终得到了一个数据框列表。
我尝试过:
df <- do.call("rbind", list)
df <- ldply(list)
但是我不得不在让它运行了3个小时后杀掉进程,仍然没有任何结果。
有没有更有效的方法?我该如何排除问题并找出为什么会花这么长时间?
顺便说一下 - 我正在使用带有RHEL的72GB四核服务器上的RStudio服务器,所以我不认为内存是问题。以下是sessionInfo:
> sessionInfo()
R version 2.14.1 (2011-12-22)
Platform: x86_64-redhat-linux-gnu (64-bit)
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=C LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] multicore_0.1-7 plyr_1.7.1 rjson_0.2.6
loaded via a namespace (and not attached):
[1] tools_2.14.1
>
data.table
和rbindlist
! - mneldata.table
中的新函数时,能否考虑将采纳答案移至mnel的答案?但是,我不知道当一个更好的答案在很长一段时间后出现时,S.O.礼仪如何运作,特别是当新答案使用最初不可用的新功能时。rbindlist
是一个确定性解决方案,比do.call("bind",...)
快得多,而这个问题和答案都关于大数据的速度。 - Matt Dowle