Ошибка: потеря памяти в памяти (предел достигнут?) R 3.5.0 macOS - программирование
Подтвердить что ты не робот

Ошибка: потеря памяти в памяти (предел достигнут?) R 3.5.0 macOS

Я работал некоторое время с большим количеством файлов, содержащих данные экспрессии генов, и недавно я столкнулся с проблемой загрузки этих данных в R после обновления до R 3.5.0. После использования около 8 ГБ памяти (мой Mac имеет 16 ГБ ОЗУ), если я попытаюсь прочитать в другом файле, я получаю следующую ошибку:

Error: vector memory exhausted (limit reached?)

Я нашел предыдущий пост (Ошибка: исчерпана память в векторе (ограничение достигнуто?)), Предлагая, чтобы я попытался установить переменную окружения R_MAX_VSIZE на более высокое значение, поэтому я попробовал следующее:

Sys.setenv(R_MAX_VSIZE = 16e9)

Тем не менее, я по-прежнему получил ту же ошибку. Я не устанавливаю экологическую переменную правильно? есть что-то, что мне не хватает?

Информация о сеансе:

R version 3.5.0 (2018-04-23)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS High Sierra 10.13.5

Matrix products: default
BLAS: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.5/Resources/lib/libRlapack.dylib

locale:[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

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

other attached packages: [1] data.table_1.11.4

loaded via a namespace (and not attached):
[1] compiler_3.5.0 tools_3.5.0   
4b9b3361

Ответ 1

Для тех, кто использует Rstudio, я обнаружил, что настройка Sys.setenv('R_MAX_VSIZE'=32000000000) работает только в командной строке, и что установка этого параметра при использовании Rstudio не предотвращает эту ошибку:

Error: vector memory exhausted (limit reached?)

После прочтения я нашел эту ветку, которая проясняет проблему с Rstudio и определяет решение, показанное ниже:

Шаг 1: Откройте терминал,

Шаг 2:

cd ~
touch .Renviron
open .Renviron

Шаг 3: Сохраните следующее как первую строку .Renviron:

R_MAX_VSIZE=100Gb 

Примечание. Этот предел включает как физическую, так и виртуальную память; поэтому установка _MAX_VSIZE = 16 ГБ на машине с 16 ГБ физической памяти может не предотвратить эту ошибку. Возможно, вам придется поиграть с этим параметром, в зависимости от характеристик вашей машины

Ответ 2

R 3.5 имеет новый системный предел для распределения памяти. Из примечаний к выпуску:

Теперь переменная среды R_MAX_VSIZE может использоваться для указания максимального размера кучи файлов. В macOS, если только эта переменная окружения не указана, максимальный размер кучи векторных файлов не должен превышать 16 ГБ и доступную физическую память. Это делается для того, чтобы избежать процесса R, когда macOS перегружает память.

Вы можете переопределить это. Вы рискуете зацикливаться и убивать процесс, но это, вероятно, происходит, если вы нажмете жесткую стену с помощью R 3.4.4 или что бы вы ни использовали раньше.

Выполните следующие действия в терминале, чтобы создать временную переменную среды R_MAX_VSIZE со значением 32 ГБ (изменить в соответствии): export R_MAX_VSIZE=32000000000

Если вы не хотите открывать терминал и запускать его каждый раз, когда хотите запустить сеанс R, вы можете добавить одну и ту же строку в свой профиль bash. Откройте терминал и найдите свой профиль bash в open.bash_profile и в текстовом редакторе добавьте строку сверху.

Вам все равно придется открыть терминал и запустить R оттуда. Вы можете запустить R в терминале, просто выполнив R или вы можете открыть GUI open -n/Applications/R.app.

Чтобы сделать это изменение в сеансе R, используйте Sys.setenv('R_MAX_VSIZE'=32000000000) и для проверки значения используйте Sys.getenv('R_MAX_VSIZE')

Ответ 3

Решение для тех, кто может быть незнаком с командной строкой, можно найти здесь:

Короче говоря, решение использовать usethis пакет.

usethis::edit_r_environ() откроет .Renviron, которое находится в вашем домашнем каталоге. Это .Renviron влияет на всю работу Rstudio

usethis::edit_r_environ("project") откроет локальную .Renviron для вашего проекта. Изменения, внесенные в этот файл, влияют только на работу, выполненную в этом конкретном проекте Rstudio.

После открытия можно установить R_MAX_VSIZE.

Связанная страница также ссылается на этот блог, который подробно описывает процесс запуска R.