У меня есть вопрос, касающийся использования памяти в 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