Если Вы не можете решиться в конечном счете, что Вы могли бы реализовать их всех. В этих случаях полезно посмотреть, как другие сделали его. Я рекомендую Вам Собственная База данных XML, С открытым исходным кодом существует , что предложения три типа интерфейсов Вы - intestigating.
«Возможно». Я тоже это делаю, и часто даже в цикле, как в
cleanMem <- function(n=10) { for (i in 1:n) gc() }
. Однако, по моему опыту, это не восстанавливает память до первоначального состояния.
Итак, что я обычно делаю, так это храню текущие задачи в файлах сценариев и выполняю их с помощью внешнего интерфейса 'r' (в Unix и из пакета 'littler'). Rscript - альтернатива этой другой ОС.
Со страницы справки на gc
:
Вызов «gc» вызывает мусор сбор состоится. Это будет также происходит автоматически без вмешательство пользователя, и основной цель вызова "gc" для отчет об использовании памяти.
Однако может быть полезно вызвать 'gc' после того, как был удален большой объект, поскольку это может побудить R вернуть память в операционную систему.
Таким образом, может быть полезным, но в большинстве случаев вам не нужно. Мое личное мнение таково, что это код крайней меры - вы не должны засорять свой код операторами gc ()
как само собой разумеющееся, но если ваша машина продолжает падать, и вы пытались все остальное, тогда это может быть полезно.
Под всем остальным я имею в виду такие вещи, как
Написание функций, а не сырых сценариев, поэтому переменные выходят за рамки.
Освобождение вашего рабочего пространства, если вы переходите от одной проблемы к другой, не связанный.
Отказ от данных / переменных, которые вас не интересуют. (Я часто получаю таблицы с десятками неинтересных столбцов.)
Нет. Если для операции недостаточно памяти, R автоматически запустит gc ()
.
"Может быть." У меня действительно нет однозначного ответа. Но файл справки предполагает, что на самом деле есть только две причины для вызова gc ():
Так как он может замедлить большую симуляцию с повторными вызовами, я обычно делал это только после удаления чего-то большого. Другими словами, я не думаю, что имеет смысл систематически вызывать его все время, если у вас нет на то веской причины.