2015-06-11 77 views
10

介绍:有什么办法可以在RStudio中禁用环境窗格?

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

问题:

RStudio总是刷新环境窗格调试(可能是迭代的全球环境和每个对象上调用summary())之后,它发生在我的全球环境数十秒。尽管刷新本身是异步的,但R会话很忙,您必须等待它完成才能继续工作。这使得调试非常烦人。并且我无法知道在RStudio中禁用“环境”窗格。

问:

有人能提出的任何美丽的解决方法吗?我看到以下几种可能性:

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

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

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

+2

请你可以添加一些更多的细节来重现这一点。你如何进行调试?当你有几个大对象(问题是内存,或者可能是读对象),还是许多小对象(问题是获取对象的结构)时,它会发生吗?如果隐藏了环境窗格(即,您正在查看历史记录或生成窗格),它会有所帮助吗? –

+0

我在任意代码行设置RStudio中的断点,启动脚本/函数 - 在断点处停止执行,然后按下“停止”或“继续”按钮,执行完成并“刷新”GIF出现在环境之上在此期间,没有任何R命令工作和RSession.exe进程占用100%(单核)CPU。因此,我不认为它与记忆有关。我试图崩溃环境窗格,没有任何影响,我认为它刷新无论如何。我的环境包含大约一百个对象,其中一些是大的xts,大的列表(大的列表),大的矩阵。 – cyberj0g

+0

在此处添加对禁用选项的支持:https://support.rstudio.com/hc/en-us/community/posts/212941327-Feature-request-Option-to-disable-environment-viewer – kennyB

回答

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

+2

伟大的代码再现问题!注意,环境窗格大约7秒刷新(在我的i5 4670上),但是'ls'立即工作。我认为这是RStudio的问题。是否有1000个列表可以真正被认为是全球大环境?我深入研究了RStudio的源代码,不,环境窗格不使用任何工具的功能:rstudio,它通过许多包装器调用RSession内部的R'ls'的内部实现,然后迭代结果。所以我认为答案是否定的,没有改变RStudio代码就无法禁用环境窗格。 – cyberj0g

+0

@ cyberj0g 1000个变量听起来很多。就像我在答案中所说的那样,如果你在函数中包装代码,那么其中一些应该消失。而且你可能会更好地使用不同的数据结构。列表的列表的单一列表,也许。 –

相关问题