Это связано с вопросом о том, как увеличить лимит памяти на macOS, «Ошибка R на MacOS: векторная память исчерпана (достигнут предел?)». Мне было интересно, есть ли какой-нибудь способ прочитать это значение в R, чтобы моя программа могла адаптироваться к верхней границе во время выполнения вместо того, чтобы сталкиваться с ошибкой ограничения памяти?
Я понимаю, что значение можно установить в файле .Renviron
, но я не уверен, всегда ли этот файл находится в одном и том же месте или вообще требуется ли он во всех случаях...
R_MAX_VSIZE
— это переменная среды, поэтому вы можете получить к ней доступ с помощью Sys.getenv().
> Sys.getenv("R_MAX_VSIZE")
100Gb
Это также связано с вопросом R о доступе к переменным среды: «Как мне заставить R читать переменные среды?»
В документации по памяти в базе R о R_MAX_VSIZE
говорится следующее.
Максимальный размер векторной кучи можно установить с помощью переменной окружения
R_MAX_VSIZE
. Попытка установить более низкий максимум, чем текущее использование, игнорируется. Пределы векторной кучи указаны в байтах.
(выделено мной)
Однако, как обсуждалось в предыдущих ответах на StackOverflow (1 , 2), значение также может быть задано как 100Gb
или 32Mb
.
Это связано с тем, что переменная окружения передается в функцию R_Decode2Long
(см. определение в исходном коде).
Вы можете адаптировать этот код для ручного анализа переменной среды или прочитать анализируемый предел, используя gc()
, который смотрит на первый нечисловой символ, чтобы определить, следует ли умножать числовую часть на 1 или на различные степени 1024.
> gc()
used (Mb) gc trigger (Mb) limit (Mb) max used (Mb)
Ncells 1192165 63.7 2426177 129.6 NA 2426177 129.6
Vcells 2756215 21.1 8388608 64.0 102400 3597156 27.5
> gc()[10]
[1] 102400
> gc()[10] * 1024^2
[1] 107374182400
Проверьте пакет memuse. Он должен содержать всю необходимую вам информацию об использовании и свободной памяти.