Ограничения памяти в R, такие как это повторяющийся кошмар для многих из нас.
Очень часто проблема ограничение накладывается на ваши пределы ОС (которые обычно могут быть изменены в командной строке Bash или PowerShell), архитектура (32 против 64 бит) или наличия смежных бесплатно RAM, независимо от общей доступной памяти.
Трудно сказать, почему что-то не вызовет проблемы с памятью при запуске по строкам, но будет поражать предел памяти при запуске в качестве .bat.
Какая версия R вы используете? У вас оба установлены? Является ли 32-битный вызов Rscript
при запуске вашего .bat-файла, тогда как вы запускаете 64-разрядную версию по очереди? Вы можете проверить версию R, которая запускается с R.Version()
.
Вы можете проверить это, выполнив команду memory.limit()
как на вашем R IDE/терминале, так и в вашем .bat-файле (обязательно укажите print
или сохраните результат как объект в вашем .bat-файле). Вам также может потребоваться установить memory.limit()
в ваш .bat-файл, поскольку он может иметь меньший размер по умолчанию, возможно, из-за различий в вашем профиле R, который вызывается в вашей среде IDE или терминале в сравнении с файлом .bat.
Если архитектура не причина вашей ошибки памяти, то у вас есть несколько шагов по устранению неполадок более попробовать: использование памяти
- Проверьте в обеих средах (в R непосредственно и через ваш процесс .bat) с помощью этого:
sort(sapply(ls(),function(x){object.size(get(x))}))
- Запуск сборщика мусора явно в сценариях, это
gc()
команду
- Проверьте все размеры объектов, чтобы убедиться, нет никаких неожиданных результатов в вашем процессе .bat:
sort(sapply(ls(),function(x){format(object.size(get(x)), units = "Mb")}))
профилирование Try памяти:
Rprof(tf <- "rprof.log", memory.profiling=TRUE)
Rprof(NULL)
summaryRprof(tf)
Хотя это вопрос RAM, для хорошей меры вы можете проверить, что мощность вычислений доступна как достаточно и не варьируя между этими двумя способами запуска вашим код: parallel::detectCores()
Изучите свое выступление с проф.lineprof
инструмент Hadley Wikham в (предупреждение: требуется devtools
и не работает на строк кода, которые требуют языка программирования C)
Ссылки Пока я тяну эти фрагменты из моего собственного кода, большинство из них изначально пришли от других смежных должностей StackOverflow, таких как:
- Reaching memory allocation in R
- R Memory Allocation "Error: cannot allocate vector of size 75.1 Mb"
- R memory limit warning vs "unable to allocate..."
- How to compute the size of the allocated memory for a general type
- R : Any other solution to "cannot allocate vector size n mb" in R?
Похоже, что вы используете 64-разрядную R при запуске его построчно и 32-битный R в пакетный файл. –