Память R, выделяемая для векторов, называется Vcells (R выделяет пространство для векторов, кратное 8 байтам), а память, выделяемая для других объектов, - как Ncells (28 байтов каждый в 32-битных системах и 56 байтов в 64-битных системах).).В начале R-сеанса до того, как какой-либо объект был создан в R-сеансе, функция gc () выводит:
gc(verbose=TRUE, full=TRUE)
# Garbage collection 2 = 0+0+2 (level 2) ...
#13.4 Mbytes of cons cells used (41%)
#3.7 Mbytes of vectors used (6%)
# used (Mb) gc trigger (Mb) max used (Mb)
#Ncells 249316 13.4 608371 32.5 407443 21.8
#Vcells 484528 3.7 8388608 64.0 1607721 12.3
Используется столбец сообщает, сколько ячеек было выделено, и следующие столбцы сообщаютобщий размер в мегабайтах.Столбец gc сообщает, когда произойдет следующая сборка мусора.Столбец max used сообщает о максимальном объеме памяти, использованном с момента последнего вызова функции gc ().Так, например, если мы создадим новый объект, мы увидим изменение в выводе gc ():
x <- as.list(1:10000)
y <- 1:100000
gc(verbose=TRUE, full=TRUE)
#Garbage collection 3 = 0+0+3 (level 2) ...
#13.9 Mbytes of cons cells used (43%)
#3.9 Mbytes of vectors used (6%)
# used (Mb) gc trigger (Mb) max used (Mb)
#Ncells 259262 13.9 608371 32.5 407443 21.8
#Vcells 504438 3.9 8388608 64.0 1607721 12.3
Создайте большой вектор с плавающей точкой и затем удалите его:
z <- seq(from=0.0, to=1.0, by=0.0000001)
gc(verbose=TRUE, full=TRUE)
#Garbage collection 6 = 0+0+6 (level 2) ...
#14.0 Mbytes of cons cells used (43%)
#80.2 Mbytes of vectors used (39%)
# used (Mb) gc trigger (Mb) max used (Mb)
#Ncells 261151 14.0 608371 32.5 407443 21.8
#Vcells 10508970 80.2 26703045 203.8 20512469 156.5
rm(z)
gc(verbose=TRUE, full=TRUE)
#Garbage collection 8 = 0+0+8 (level 2) ...
#14.0 Mbytes of cons cells used (43%)
#3.9 Mbytes of vectors used (2%)
# used (Mb) gc trigger (Mb) max used (Mb)
#Ncells 261391 14.0 608371 32.5 407443 21.8
#Vcells 509467 3.9 21362436 163.0 20512469 156.5
Сборщик мусора восстанавливает память, которая больше не используется.Приведенные выше значения из таблицы в столбце «gc trigger» указывают, когда gc запускается.Если вы вызываете функцию gc (), вы можете заставить сборщик мусора вернуть память в систему.
Можно изменить максимумы, установленные для Ncells или / и Vcells.См. https://stat.ethz.ch/R-manual/R-devel/library/base/html/Memory.html Эта ссылка предоставляет подробную информацию не только об использовании памяти в R, но и о том, как работает сборщик мусора в R.
Что касается вашего основного вопроса о параметре full = TRUE,для документации R эта опция должна использоваться, если вы хотите более точный отчет об использовании памяти.Это также заставляет выполнять полную сборку мусора (и в результате может занять немного больше времени).В противном случае R может выполнить только частичную сборку мусора, освобождая память только для недавно выделенных объектов.
Кстати, как вы можете видеть из последней версии документации R (? Память), способ управления памятью в RВыполнено очень многое зависит от ОС у вас есть.Например: В Windows параметр --max-mem-size (или переменная окружения R_MAX_MEM_SIZE) устанавливает максимальное (виртуальное) выделение памяти: минимально допустимое значение составляет 32M.Это предназначено для отлова попыток выделить чрезмерное количество памяти, что может привести к нехватке ресурсов в других процессах.Смотрите также memory.limit .
Опять же, я бы очень внимательно прочитал документацию по теме памяти в R (? Memory).Обязательно прочитайте версию, соответствующую версии R, которую вы используете в своей системе, поскольку между версиями есть некоторые изменения.
Есть еще две ссылки, которые стоит прочитать, чтобы получить больше информации о том, как сборщик мусора работает в R:http://homepage.stat.uiowa.edu/~luke/R/barrier.html http://homepage.stat.uiowa.edu/~luke/R/gengcnotes.html
Поскольку вызов сборщика мусора является относительно дорогой операцией, вы не хотите включать его в циклы.В идеале вы должны удалять объекты, которые вам больше не нужны, с помощью функции rm (), и пусть R решает, когда выполнять сборку мусора.
Еще одно примечание: Rstudio запускает R с собственными настройками.Например, вот вывод из обычного сеанса R:
gc(verbose=TRUE, full=TRUE)
#Garbage collection 2 = 0+0+2 (level 2) ...
#13.4 Mbytes of cons cells used (41%)
#3.7 Mbytes of vectors used (6%)
# used (Mb) gc trigger (Mb) max used (Mb)
#Ncells 249316 13.4 608371 32.5 407443 21.8
#Vcells 484528 3.7 8388608 64.0 1607721 12.3
memory.limit()
#[1] 7888
memory.size()
#[1] 29.02
Вот вывод из сеанса R в Rstudio:
gc(verbose=TRUE, full=TRUE)
#Garbage collection 19 = 15+1+3 (level 2) ...
#32.6 Mbytes of cons cells used (45%)
#9.3 Mbytes of vectors used (14%)
# used (Mb) gc trigger (Mb) max used (Mb)
#Ncells 610199 32.6 1369865 73.2 1369865 73.2
#Vcells 1210415 9.3 8388608 64.0 1842725 14.1
memory.limit()
#[1] 7888
memory.size()
#[1] 99.49