有没有办法在 RStudio 中禁用环境窗格?

Is there any way to disable environment pane in RStudio?

简介:

我有一个 RStudio 项目,我正在研究(相当)大数据集。虽然我试图保持全球环境清洁,但一段时间后它变得充满了巨大的物体。

问题:

RStudio 总是在调试后刷新环境窗格(可能迭代全局环境并在每个对象上调用 summary()),而我的全局环境需要数十秒。虽然刷新本身是异步的,但 R 会话很忙,您必须等待它完成才能继续工作。这使得调试非常烦人。而且我不知道如何禁用 RStudio 中的环境窗格。

问题:

有人可以提出任何漂亮的解决方法吗?我看到以下可能性:

  1. 自定义 RStudio 源以添加禁用环境的选项 窗格。
  2. 经常清理全局环境(不方便,因为原始数据需要耗时的预处理,我经常更改预处理逻辑)。
  3. 也许有特定类型的对象导致延迟不是因为它们的大小而是因为它们的结构?

我现在正在处理可重现的示例,但尚不清楚是哪些对象导致了问题。

前段时间我已经通过电子邮件向 RStudio 支持人员发送了有关该问题的信息,但尚未收到任何答复。

我可以用很多小的嵌套列表变量重现问题。

# 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 中分配所有结果。这样刷新只需要几微秒。

虽然它在 public 版本的 RStudio 中尚不可用,但 RStudio v1.3 daily builds 允许您禁用环境窗格的 automatic-updates:

选择Manual Refresh Only 将禁用环境窗格的自动刷新。