Есть ли способ отключить среду в RStudio?
Введение:
У меня есть проект RStudio, где я исследую (довольно) большие наборы данных. Хотя я пытаюсь сохранить глобальную среду чистой, через некоторое время она заполняется огромными объектами.
Проблема:
RStudio всегда обновляет среду после отладки (возможно, итерация глобальной среды и вызывает summary()
для каждого объекта), и она занимает десятки секунд в моей глобальной среде. Хотя само обновление является асинхронным, сеанс R занят, и вы должны дождаться его завершения, прежде чем сможете продолжить работу. Это делает отладку очень раздражающей. И я не знаю, как отключить среду в RStudio.
Вопрос:
Может кто-нибудь предложить какое-нибудь красивое обходное решение? Я вижу следующие возможности:
- Настройте источники RStudio, чтобы добавить параметр для отключения среды
панель.
- Часто чистая глобальная среда (не удобна, потому что сырые данные требуют много времени для предварительной обработки, и я часто меняю логику предварительной обработки).
- Возможно, существуют определенные типы объектов, которые вызывают отставание не из-за их размера, а из-за их структуры?
Теперь я работаю над воспроизводимым примером, но не выясняет, какие объекты вызывают проблему.
Я уже некоторое время назад по электронной почте поддерживал RStudio об этой проблеме, но пока не получил ответа.
Ответы
Ответ 1
Я могу воспроизвести проблему с большим количеством небольших вложенных переменных списка.
# Populate global environment with lots of nested list variables
invisible(
replicate(
1000,
assign(
paste0(sample(letters, 10, replace = TRUE), collapse = ""),
list(a = 1, b = list(ba = 2.1, bb = list(bba = 2.21, bbb = 2.22))),
envir = globalenv()
)
)
)
f <- function() browser()
f() # hit ENTER in the console once you hit the browser
Это говорит о том, что проблема заключается в том, что RStudio использует свой эквивалент ls.str()
в глобальной среде.
Я подозреваю, что поведение реализовано в одной из функций, перечисленных в ls("tools:rstudio", all.names = TRUE)
, но я не уверен, что. Если вы его найдете, вы можете переопределить его.
В качестве альтернативы, лучше всего переработать код, чтобы вы не назначали так много переменных в глобальной среде. Оберните большую часть вашего кода в функции (поэтому большинство переменных существует только для жизни вызова функции). Вы также можете определить новую среду
e <- new.env(parent = globalenv())
Затем присвойте все свои результаты внутри e
. Таким образом, обновление занимает всего несколько микросекунд.
Ответ 2
Хотя это еще не доступно в общедоступном выпуске RStudio, ежедневные сборки RStudio v1.3 позволяют отключить автоматическое обновление панели среды:
![Environment Pane Popup]()
Выбор " Manual Refresh Only
отключит автоматическое обновление панели среды.