0

学习如何在 R 中为大型数据集(超过 1 或 2 GB)计算任务,我正在尝试使用ff包和ffdfdply函数。(有关如何使用,请参阅此链接ffdfdplyR 语言:计算“分组依据”或使用 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
4

1 回答 1

2

我在使用我们最近上传到 CRAN 的包时也注意到了这一点。这似乎是由于 ffbase 包中的“[.ff”和“[<-.ff”包 ff 提取器和设置器函数重载引起的。

我将从包中删除此功能,并很快将其上传到 CRAN。同时,您可以使用 ffbase 的 0.7 版本,您可以从这里获得: http ://dl.dropbox.com/u/25690064/ffbase_0.7.ta​​r.gz

并将其安装为:

download.file("http://dl.dropbox.com/u/25690064/ffbase_0.7.tar.gz", "ffbase_0.7.tar.gz")
shell("R CMD INSTALL ffbase_0.7.tar.gz")

让我知道这是否有帮助。

于 2012-11-19T14:48:47.187 回答