简介:
我有一个RStudio项目,我正在研究(相当)大数据集。虽然我试图保持全球环境清洁,但经过一段时间后,它变得充满了巨大的物体。
问题:
RStudio在调试后总是刷新环境窗格(可能迭代全局环境并在每个对象上调用summary()
),并且在我的全局环境中需要几十秒。虽然刷新本身是异步的,但R会话很忙,您必须等待它才能继续工作。这使得调试非常烦人。而且我无法在RStudio中禁用环境窗格。
问题:
有人可以提出任何美妙的解决方法吗?我看到了以下可能性:
我现在正在研究可重现的例子,但不清楚导致问题的对象。
前段时间我已经通过电子邮件发送了关于该问题的RStudio支持,但还没有得到任何答案。
答案 0 :(得分: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
内分配所有结果。这样刷新只需几微秒。
答案 1 :(得分:3)