Вопрос по r – Выделение памяти «Ошибка: невозможно выделить вектор размером 75,1 Мб» [дубликат]

30

This question already has an answer here:

В процессе векторизации некоторого кода симуляции у меня возникла проблема с памятью. Я использую 32-битную версию R 2.15.0 (через RStudio версия 0.96.122) под Windows XP. У моей машины 3,46 ГБ оперативной памяти.

> sessionInfo()
R version 2.15.0 (2012-03-30)
Platform: i386-pc-mingw32/i386 (32-bit)

locale:
[1] LC_COLLATE=English_United Kingdom.1252  LC_CTYPE=English_United Kingdom.1252   
[3] LC_MONETARY=English_United Kingdom.1252 LC_NUMERIC=C                           
[5] LC_TIME=English_United Kingdom.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] Matrix_1.0-6   lattice_0.20-6 MASS_7.3-18   

loaded via a namespace (and not attached):
[1] grid_2.15.0  tools_2.15.0

Вот минимальный пример проблемы:

> memory.limit(3000)
[1] 3000
> rm(list = ls())
> gc()
          used (Mb) gc trigger  (Mb)  max used   (Mb)
Ncells 1069761 28.6    1710298  45.7   1710298   45.7
Vcells  901466  6.9   21692001 165.5 173386187 1322.9
> N <- 894993
> library(MASS)
> sims <- mvrnorm(n = N, mu = rep(0, 11), Sigma = diag(nrow = 11))
> sims <- mvrnorm(n = N + 1, mu = rep(0, 11), Sigma = diag(nrow = 11))
Error: cannot allocate vector of size 75.1 Mb

(В моем приложении ковариационная матрица Sigma не является диагональной, но я получаю ту же ошибку в любом случае.)

Я провел день, читая о проблемах выделения памяти в R (включаяВот, Вот а такжеВот). Из того, что я прочитал, у меня сложилось впечатление, что речь идет не о доступной ОЗУ как таковой, а о доступном непрерывном адресном пространстве. Тем не менее, 75.1Mb кажется мне довольно маленьким.

Буду очень признателен за любые мысли или предложения, которые могут у вас возникнуть.

Ваш Ответ

4   ответа
29

R дошел до того, что ОС не может выделить егоanother 75.1Mb кусок оперативной памяти. Это размер порции памяти, необходимой для выполнения следующей подоперации. Это не утверждение о количестве непрерывной оперативной памяти, необходимой для завершения всего процесса. К этому моменту все доступное ОЗУ исчерпано, но вам нужно больше памяти для продолжения, и ОС не может выделить ОЗУ больше памяти.

Потенциальные решения этого многообразны. Очевидным является использование 64-битной машины с большим объемом оперативной памяти. Я забыл подробности, но IIRC на 32-битной Windows, любой отдельный процесс может использовать только ограниченный объем ОЗУ (2 ГБ?), И независимо от того, Windows будет сохранять часть памяти для себя, поэтому доступной для R оперативной памяти будет несколько меньше, чем 3.4Gb у вас есть. На 64-битной Windows R можно будет использовать больше ОЗУ, и максимальный объем ОЗУ, который вы можете установить / установить, будет увеличен.

Если это невозможно, рассмотрите альтернативный подход; возможно, делать ваши симуляции в партиях с n на партию намного меньше, чемN, Таким образом, вы можете нарисовать гораздо меньшее количество симуляций, делать все, что вы хотели, собирать результаты, а затем повторять этот процесс, пока вы не выполнили достаточное количество симуляций. Вы не показываете, чтоN есть, но я подозреваю, что это большой, так что попробуйте меньшеN несколько раз, чтобы дать вамN в общем и целом.

Error: User Rate Limit Exceeded inhuretnakht
Error: User Rate Limit Exceeded inhuretnakht
Error: User Rate Limit Exceeded inhuretnakht
Error: User Rate Limit ExceededStack OverflowError: User Rate Limit Exceeded
Error: User Rate Limit Exceededlapply()Error: User Rate Limit Exceeded
2

gc() может помочь

может помочь сохранение данных в виде .RData, закрытие, повторное открытие R и загрузка RData.

см мой ответ здесь:https://stackoverflow.com/a/24754706/190791 Больше подробностей

0

R останавливается независимо от того, какое значение N вы используете? попытайтесь использовать маленькие значения и посмотрите, является ли это функцией mvrnorm, которая является проблемой, или вы можете просто зациклить ее на подмножествах. Вставьтеgc() функция в цикле, чтобы освободить часть оперативной памяти непрерывно

31

У меня было такое же предупреждение с использованием растрового пакета.

> my_mask[my_mask[] != 1] <- NA
Error: cannot allocate vector of size 5.4 Gb

Решение действительно простое и состоит в увеличении емкости хранилища R, здесь строка кода:

##To know the current storage capacity
> memory.limit()
[1] 8103
## To increase the storage capacity
> memory.limit(size=56000)
[1] 56000    
## I did this to increase my storage capacity to 7GB

Надеюсь, это поможет вам решить проблему ура

Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededError in memory.limit(size = 56000) : don't be silly!: your machine has a 4Gb address limit
Error: User Rate Limit Exceeded

Похожие вопросы