1

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

ディスクに保存したり、新しいセッションを開始したり、ディスクからロードしたりすることなく、メモリを再利用する方法はありますか?

4

0 に答える 0