R パッケージ mgcv を使用して多数の GAM フィットを実行すると、メモリが不足するという問題が発生しています。ライブラリをロードし、次のスクリプトを使用していくつかのランダム データを初期化します。
library(mgcv) #for gam
set.seed(1)
n = 1000
myData = data.frame(X1=rnorm(n),
X2=rnorm(n),
X3=rnorm(n),
Y=rnorm(n))
gc()
これは与える
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 1134579 60.6 1476915 78.9 1368491 73.1
Vcells 1611179 12.3 2518261 19.3 1961928 15.0
次に、10 個の GAM を装着し、メモリ使用量を確認します
fits <- lapply(1:10, function(j) {gam(Y~te(X1,X2,k=10)+te(X2,X3,k=10), data=myData)})
gc()
object.size(fits)
結果は
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 1200064 64.1 1835812 98.1 1368491 73.1
Vcells 10192307 77.8 15351293 117.2 14537510 111.0
> object.size(fits)
22871928 bytes
作成したオブジェクトは 1 つだけですが (適合)、メモリ使用量はこのオブジェクトのサイズの 3 倍であることに注意してください。より多くのモデルを適合させると、最終的に R はメモリを完全に使い果たします。私がやっていることは、ディスクに保存することです
saveRDS(fits, "fits", refhook=function(...) {"dummy"})
次に、新しいセッションを開始してリロードします
library(mgcv) #for gam
fits <- readRDS("fits", refhook=function(...) {.GlobalEnv})
gc()
そして出来上がり!記憶が戻った
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 1139845 60.9 1835812 98.1 1368491 73.1
Vcells 4322985 33.0 4972379 38.0 4324092 33.0
ディスクに保存したり、新しいセッションを開始したり、ディスクからロードしたりすることなく、メモリを再利用する方法はありますか?