Принуждение сборки "мусора" выполнить в R с gc () команду

Если Вы не можете решиться в конечном счете, что Вы могли бы реализовать их всех. В этих случаях полезно посмотреть, как другие сделали его. Я рекомендую Вам Собственная База данных XML, С открытым исходным кодом существует , что предложения три типа интерфейсов Вы - intestigating.

64
задан NelsonGon 4 January 2019 в 06:35
поделиться

4 ответа

«Возможно». Я тоже это делаю, и часто даже в цикле, как в

cleanMem <- function(n=10) { for (i in 1:n) gc() }

. Однако, по моему опыту, это не восстанавливает память до первоначального состояния.

Итак, что я обычно делаю, так это храню текущие задачи в файлах сценариев и выполняю их с помощью внешнего интерфейса 'r' (в Unix и из пакета 'littler'). Rscript - альтернатива этой другой ОС.

46
ответ дан 24 November 2019 в 15:53
поделиться

Со страницы справки на gc :

Вызов «gc» вызывает мусор сбор состоится. Это будет также происходит автоматически без вмешательство пользователя, и основной цель вызова "gc" для отчет об использовании памяти.

Однако может быть полезно вызвать 'gc' после того, как был удален большой объект, поскольку это может побудить R вернуть память в операционную систему.

Таким образом, может быть полезным, но в большинстве случаев вам не нужно. Мое личное мнение таково, что это код крайней меры - вы не должны засорять свой код операторами gc () как само собой разумеющееся, но если ваша машина продолжает падать, и вы пытались все остальное, тогда это может быть полезно.

Под всем остальным я имею в виду такие вещи, как

  1. Написание функций, а не сырых сценариев, поэтому переменные выходят за рамки.

  2. Освобождение вашего рабочего пространства, если вы переходите от одной проблемы к другой, не связанный.

  3. Отказ от данных / переменных, которые вас не интересуют. (Я часто получаю таблицы с десятками неинтересных столбцов.)

23
ответ дан 24 November 2019 в 15:53
поделиться

Нет. Если для операции недостаточно памяти, R автоматически запустит gc () .

9
ответ дан 24 November 2019 в 15:53
поделиться

"Может быть." У меня действительно нет однозначного ответа. Но файл справки предполагает, что на самом деле есть только две причины для вызова gc ():

  1. Вам нужен отчет об использовании памяти.
  2. После удаления большого объекта "он может побудить R вернуть память операционной системе. . "

Так как он может замедлить большую симуляцию с повторными вызовами, я обычно делал это только после удаления чего-то большого. Другими словами, я не думаю, что имеет смысл систематически вызывать его все время, если у вас нет на то веской причины.

7
ответ дан 24 November 2019 в 15:53
поделиться
Другие вопросы по тегам:

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