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

cyb*_*j0g 13 r rstudio

介绍:

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

问题:

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

题:

有人可以建议任何美丽的解决方法吗?我看到以下可能性:

  1. 自定义RStudio源以添加禁用"环境"窗格的选项.
  2. 经常清洁的全球环境(不方便,因为原始数据需要耗时的预处理,而且我经常更改预处理逻辑).
  3. 也许有特定类型的物体造成滞后不是因为它们的大小,而是因为它们的结构?

我现在正在研究可重现的例子,但不清楚导致问题的对象.

我前段时间通过电子邮件发送了关于该问题的RStudio支持,但还没有得到任何答案.

Kev*_*hey 10

虽然它尚未在 RStudio 的公开版本中可用,但 RStudio 的 v1.3每日版本允许您禁用环境窗格的自动更新:

环境窗格弹出窗口

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


Ric*_*ton 7

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

# 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
Run Code Online (Sandbox Code Playgroud)

这表明问题是RStudio ls.str()在全球环境中运行它的等价物.

我怀疑这个行为是在列出的一个函数中实现的ls("tools:rstudio", all.names = TRUE),但我不确定是哪个.如果找到它,您可以覆盖它.

或者,最好的办法是重新编写代码,这样就不会在全局环境中分配如此多的变量.将大部分代码包装到函数中(因此大多数变量仅在函数调用的生命周期内存在).您还可以定义新环境

e <- new.env(parent = globalenv())
Run Code Online (Sandbox Code Playgroud)

然后在里面分配所有结果e.这样刷新只需几微秒.

  • 太棒了,那段代码再现了这个问题!请注意,环境窗格会在7秒左右刷新(在我的i5 4670上),但是`ls`会立即生效.我认为这是RStudio的明确问题.1000个列表清单真的可以被认为是大的全球环境吗?我挖掘了RStudio来源,不,环境窗格不使用工具中的任何函数:rstudio,它通过许多包装器在RSession进程内部调用R的`ls`的内部实现,然后迭代结果.所以我认为答案是否定的,没有更改RStudio代码就无法禁用环境窗格. (2认同)