MNPパッケージ使用時のRのメモリ使用に関する質問があります。私の目標は、多項式プロビットモデルを推定し、そのモデルを使用して大量のデータセットの選択肢を予測することです。予測データを分割してリストにしました。MNPパッケージを使用した場合のメモリリークR
問題は、リストをループして予測すると、Rによって使用されるメモリが絶えず増加し、コンピュータの最大メモリに達した後にスワップ領域を使用することです。割り当てられたメモリは、それらの境界にぶつかっても解放されません。これは、私が追加のオブジェクトを作成しないために起こりますので、何が起こっているのか分かりません。
以下、上記の問題を抱えるサンプルコードを貼り付けました。この例を実行すると、メモリは絶えず増加し、すべての変数を削除してgc()
を呼び出しても使用されたままになります。
私が実際に持っているデータは、この例で生成されたものよりはるかに大きいので、回避策を見つける必要があります。
私の質問は以下のとおりです。
なぜこのスクリプトはそれほど多くのメモリを使用していますか?
各ステップの後に割り当てられたメモリを解放するにはどうすればよいですか?ここで
library(MNP)
nr <- 10000
draws <- 500
pieces <- 100
# Create artificial training data
trainingData <- data.frame(y = sample(c(1,2,3), nr, rep = T), x1 = sample(1:nr), x2 = sample(1:nr), x3 = sample(1:nr))
# Create artificial predictor data
predictorData <- list()
for(i in 1:pieces){
predictorData[[i]] <- data.frame(y = NA, x1 = sample(1:nr), x2 = sample(1:nr), x3 = sample(1:nr))
}
# Estimate multinomial probit
mnp.out <- mnp(y ~ x1 + x2, trainingData, n.draws = draws)
# Predict using predictor data
predicted <- list()
for(i in 1:length(predictorData)){
cat('|')
mnp.pred <- predict(mnp.out, predictorData[[i]], type = 'prob')$p
mnp.pred <- colnames(mnp.pred)[apply(mnp.pred, 1, which.max)]
predicted[[i]] <- mnp.pred
rm(mnp.pred)
gc()
}
# Unite output into one string
predicted <- factor(unlist(predicted))
出力統計は、スクリプトを実行した後、次のとおりです。ここで
> rm(list = ls())
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 158950 8.5 407500 21.8 407500 21.8
Vcells 142001 1.1 33026373 252.0 61418067 468.6
はRの私の仕様は以下のとおりです。
> sessionInfo()
R version 2.13.1 (2011-07-08)
Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit)
locale:
[1] en_US.UTF-8/en_US.UTF-8/C/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] MNP_2.6-2 MASS_7.3-14
上記のスクリプト(rm()とgc()を含む)を実行した後、私のコンピュータ上のメモリ使用量は次のようになります: 'RSIZE 5661M、VPRVT 6108M、VSIZE 9500M' – yellowcap
これは特有です。これを実行する前に仮想メモリの使用量は何でしたか?常駐メモリに関しては、これは偽のものになることがあります。これらは、OSによって回収できるバッファです。 OSXに 'free'がある場合は、それを試してその情報を報告してください。また、Rの最新バージョンを使用するとどうなりますか?私はMNPのそれ以上の最近のバージョンがないことがわかります。 – Iterator