使用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