首页 文章

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

提问于
浏览
11

Introduction:

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

Problem:

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

Question:

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

  • 自定义RStudio源以添加禁用“环境”窗格的选项 .

  • 经常清理全局环境(不方便,因为原始数据需要耗时的预处理,而且我经常更改预处理逻辑) .

  • 也许有特定类型的物体导致滞后不是因为它们的大小而是因为它们的结构?

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

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

1 回答

  • 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
    

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

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

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

    e <- new.env(parent = globalenv())
    

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

相关问题