学习如何在 R 中为大型数据集(超过 1 或 2 GB)计算任务,我正在尝试使用ff
包和ffdfdply
函数。(有关如何使用,请参阅此链接ffdfdply
:R 语言:计算“分组依据”或使用 ff 包拆分的问题)
我的数据有以下列:
“id”“birth_date”“diagnose”“date_diagnose”
每个“id”有几行,我想提取第一个诊断日期。
我会应用这个:
library(ffbase)
library(plyr)
load(file=file_name); # to load my ffdf database, called data.f .
my_fun <- function(x){
ddply( x , .(id), summarize,
age = min(date_diagnose - birth_date, na.rm=TRUE))
}
result <- ffdfdply(x = data.f, split = data.f$id,
FUN = function(x) my_fun(x) , trace=TRUE) ;
result[1:10,] # to check....
这很奇怪,但是这个命令:ffdfdply(x = data.f, .... )
正在使 RStudio(和 R)崩溃。有时相同的命令会使 R 崩溃,有时不会。例如,如果我再次触发该ffdfdply
行(第一次工作),R 将崩溃。
同样使用其他函数、数据等也会有同样的效果。没有内存增加,或者log.txt中的任何内容。应用 summaryBy "technique" 时的相同行为....
因此,如果有人遇到同样的问题并找到了解决方案,那将非常有帮助。也ffdfdply
变得非常慢(比 SAS 慢......),我正在考虑制定另一种策略来完成此类任务。
是否ffdfdply
考虑到例如数据集按 id 排序?(因此它不必查看所有数据以获取相同的 id...)。
因此,如果有人知道解决此ddply
问题的其他方法,那么对于所有“R 中具有低 RAM 内存的大型数据集”用户来说,这将是非常棒的。
这是我的sessionInfo()
R version 2.15.2 (2012-10-26)
Platform: i386-w64-mingw32/i386 (32-bit)
locale:
[1] LC_COLLATE=Danish_Denmark.1252 LC_CTYPE=Danish_Denmark.1252
[3] LC_MONETARY=Danish_Denmark.1252 LC_NUMERIC=C
[5] LC_TIME=Danish_Denmark.1252
attached base packages:
[1] tools stats graphics grDevices utils datasets methods
[8] base
other attached packages:
[1] plyr_1.7.1 ffbase_0.6-1 ff_2.2-10 bit_1.1-9