学习如何在R中为大型数据集(超过1或2 GB)计算任务,我正在尝试使用ff
包和ffdfdply
函数。
(请参阅此链接,了解如何使用ffdfdply
:R language: problems computing "group by" or split with ff package)
我的数据包含以下列:
“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“技术”时的行为相同....
因此,如果有人遇到同样的问题并找到解决方案,那将非常有帮助。
同样ffdfdply
变得非常慢(比SAS慢......),我正在考虑制定另一种策略来完成这类任务。
ffdfdply
考虑到例如数据集按ID排序吗? (因此它不必查看所有数据以采用相同的ID ...)。
因此,如果有人知道这个ddply
问题的其他方法,那么对于所有“具有低RAM内存的R中的大数据集”用户来说,它真的很棒。
这是我的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
答案 0 :(得分:2)
在使用我们最近上传到CRAN的软件包时也注意到了这一点。它似乎是由于包ffbase中的“[.ff”和“[&lt; - .ff”提取器和setter函数从包ff中重载而引起的。
我将从包中删除此功能,并很快将其上传到CRAN。同时,您可以使用ffbase的0.7版本,您可以在此处获取: http://dl.dropbox.com/u/25690064/ffbase_0.7.tar.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")
如果有帮助,请告诉我。