當我使用MNP程序包時,有關於R中內存使用的問題。我的目標是估計多項式概率模型,然後使用該模型預測大量數據集上的選擇。我已經將預測數據分成了一系列的部分。當在R中使用MNP程序包時發生內存泄漏
問題是,當我遍歷列表進行預測時,R使用的內存會不斷增大並在達到我的計算機的最大內存後使用交換空間。即使遇到這些邊界,分配的內存也不會釋放。即使我不創建任何其他對象,所以我不明白髮生了什麼。
下面我粘貼了一個示例代碼,它遇到了上述問題。運行示例時,內存不斷增大,即使在刪除所有變量並調用gc()
後仍保持使用狀態。
我擁有的真實數據比示例中生成的數據大得多,所以我需要找到解決方法。
我的問題是:
爲什麼這個腳本中使用這麼多內存?
如何強制R在每個步驟後釋放分配的內存?
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
這是特有的。運行此程序之前,虛擬內存使用情況如何?至於駐留內存,這可能是虛假的 - 有時這些是可以被操作系統回收的緩衝區。如果OSX有'free',請嘗試並報告該信息。另外,如果使用最新版本的R,會發生什麼?我發現沒有更新版本的MNP。 – Iterator