ff package of Rを使用して、fsdfオブジェクトにcsvファイルをインポートしましたが、オブジェクトが約700MBのRAMを占有していたことに驚きました。 ffは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コールを省略し、タスクマネージャ(私は4ギガバイトのRAMを使用してWindows XPマシン上でRを実行した)を見ました。私はオブジェクトをffsaveし、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はまだメモリの700メガバイトとbiglm回帰よりも多くを使用します。
biglmには独自のメモリ処理があり、モデルを更新するためにチャンクでデータチャンクを渡すことができますが、ffオブジェクトを使用することはできません。私はあなたが使用する関数のドキュメントを読むことをお勧めします。 – mdsumner
biglmと併用する方法は?ffを参照してください – mdsumner
ありがとう、@mdsummer。私はその文書を読んだ。明らかに、上記のbiglm行のエラーはbiglm()がデータフレームを期待しているが、ffdfはデータフレームではないためです。正しい使用法は、biglm(y〜as.factor(x)、data = training.ffdf [、c(2,5)])のようなものでなければなりません。列インデックスを使用すると、ffdfはデータフレームを返します。しかし、これらのすべてはもちろん、なぜtraining.fdffオブジェクト自体が700MB以上のメモリを占めるのか説明しません。 – user740006