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

有没有办法在RStudio中禁用环境窗格?,r,rstudio,R,Rstudio,简介: 我有一个RStudio项目,我正在研究(相当)大数据集。虽然我在努力保持全球环境清洁,但过了一段时间,它就会被巨大的物体填满 问题: RStudio总是在调试后刷新环境窗格(可能会迭代全局环境,并对每个对象调用summary()),在我的全局环境中需要数十秒。尽管刷新本身是异步的,但R会话很忙,您必须等待它完成后才能继续工作。这使得调试非常烦人。据我所知,没有办法在RStudio中禁用环境窗格 问题: 有人能提出一些漂亮的解决办法吗?我认为有以下可能: 自定义RStudio源以添加禁用环

简介:

我有一个RStudio项目,我正在研究(相当)大数据集。虽然我在努力保持全球环境清洁,但过了一段时间,它就会被巨大的物体填满

问题:

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

问题:

有人能提出一些漂亮的解决办法吗?我认为有以下可能:

  • 自定义RStudio源以添加禁用环境的选项 窗格
  • 经常清理全局环境(不方便,因为原始数据需要耗时的预处理,而且我经常更改预处理逻辑)
  • 也许有特定类型的物体导致了延迟,不是因为它们的大小,而是因为它们的结构
  • 我现在正在研究可复制的示例,但不清楚是哪些对象导致了问题


    不久前,我已经就这个问题向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
    

    然后将所有结果分配到
    e
    中。这样,刷新只需几微秒。

    虽然RStudio的公共版本尚未提供,但RStudio的v1.3允许您禁用环境窗格的自动更新:


    选择“仅手动刷新”将禁用“环境”窗格的自动刷新。

    请添加更多详细信息以重现此操作。你是如何调试的?当您有几个大对象(问题是内存,或者可能是读取对象)或许多小对象(问题是获取对象的结构)时,会发生这种情况吗?如果环境窗格被隐藏(也就是说,您正在查看历史记录或构建窗格),这会有区别吗?我正在RStudio中的任意代码行上设置断点,启动脚本/函数-在断点上停止执行,然后按“停止”或“继续”按钮,执行完成并“刷新”GIF显示在环境窗格的顶部,在此期间,R命令均不工作,RSession.exe进程占用100%的CPU(单核)。因此,我认为这与记忆无关。我试图折叠环境窗格,但没有任何效果,我认为它无论如何都会刷新。我的环境包含大约数百个对象,其中一些是大xts、大列表(列表)、大矩阵。请在此处添加对禁用选项的支持:太好了,代码重现了这个问题!请注意,环境窗格刷新约7秒(在我的i5 4670上),但
    ls
    可以立即工作。我认为这是一个明显的RStudio问题。1000张名单真的可以被视为全球大环境吗?我深入研究了RStudio源代码,不,环境窗格不使用工具中的任何函数:RStudio,它通过许多包装器在RSession进程内部调用R的
    ls
    ,然后迭代结果。所以我认为答案是否定的,如果不更改RStudio代码,就无法禁用环境窗格。@CyberJ0G1000变量听起来确实很多。正如我在回答中所说的,如果您在函数中包装代码,那么其中一些应该消失。使用不同的数据结构可能会更好。也许是一张单子。
    e <- new.env(parent = globalenv())