使用ff package of R,我将一个csv文件导入到一个ffdf对象中,但很惊讶地发现该对象占用了大约700MB的RAM。是否应该将数据保存在磁盘上而不是RAM中?我做错什么了吗?我是R的新手。任何意见都表示赞赏。谢谢。为什么ff仍将数据存储在RAM中?
> training.ffdf <- read.csv.ffdf(file="c:/temp/training.csv", header=T)
> # [Edit: the csv file is conceptually a large data frame consisting
> # of heterogeneous types of data --- some integers and some character
> # strings.]
>
> # The ffdf object occupies 718MB!!!
> object.size(training.ffdf)
753193048 bytes
Warning messages:
1: In structure(.Internal(object.size(x)), class = "object_size") :
Reached total allocation of 1535Mb: see help(memory.size)
2: In structure(.Internal(object.size(x)), class = "object_size") :
Reached total allocation of 1535Mb: see help(memory.size)
>
> # Shouldn't biglm be able to process data in small chunks?!
> fit <- biglm(y ~ as.factor(x), data=training.ffdf)
Error: cannot allocate vector of size 18.5 Mb
编辑:我跟着汤米的意见,省略了object.size电话,看了看任务管理器(我的Windows XP计算机有4GB RAM上运行R)。我找到了对象,关闭了R,重新打开它,并从文件中加载数据。问题占了上风:
> library(ff); library(biglm)
> # At this point RGui.exe had used up 26176 KB of memory
> ffload(file="c:/temp/trainingffimg")
> # Now 701160 KB
> fit <- biglm(y ~ as.factor(x), data=training.ffdf)
Error: cannot allocate vector of size 18.5 Mb
我也曾尝试
> options("ffmaxbytes" = 402653184) # default = 804782080 B ~ 767.5 MB
但加载数据后,仍然RGUI用完以上的内存700MB和biglm回归仍发出错误消息。
biglm有自己的内存处理,并且可以通过块传递数据块来更新模型,但它不能使用ff对象。我建议阅读你想使用的函数的文档。 – mdsumner 2012-01-18 05:04:34
参见?ff如何与biglm联合使用 – mdsumner 2012-01-18 05:28:51
谢谢,@mdsummer。我已阅读文档。显然上面的biglm行中的错误是由于biglm()期望数据帧,但ffdf不是数据帧。正确的用法应该像biglm(y〜as.factor(x),data = training.ffdf [,c(2,5)])。通过列索引,ffdf将返回一个数据帧。但是,所有这些当然都不能解释为什么training.fdff对象本身占用大于700MB的内存。 – user740006 2012-01-18 06:55:46