Reputation: 3787
Introduction:
I have an RStudio project where I'm researching (fairly) big data sets. Though I'm trying to keep global environment clean, after some time it becomes filled with huge objects.
Problem:
RStudio always refreshes Environment pane after debugging (probably iterates global environment and calls summary()
on each object), and it takes tens of seconds on my global environment. Although the refresh itself is async, R session is busy and you must wait for it to finish before you can continue working. That makes debugging very annoying. And there's no way I know of to disable Environment pane in RStudio.
Question:
Can someone suggest any beautiful workaround of that? I see following possibilities:
I'm working on reproducible example now, but it's not clear which objects causing the issue.
I've emailed RStudio support about that issue some time ago, but didn't get any answer yet.
Upvotes: 15
Views: 2578
Reputation: 21285
While it's not yet available in a public release of RStudio, the v1.3 daily builds of RStudio allow you to disable the automatic-updates of the environment pane:
Selecting Manual Refresh Only
would disable the automatic refresh of the environment pane.
Upvotes: 10
Reputation: 121057
I can reproduce the problem with lots of small nested list variables.
# 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
This suggests that the problem is RStudio running its equivalent of ls.str()
on the global environment.
I suspect that the behaviour is implemented in one of the functions listed by ls("tools:rstudio", all.names = TRUE)
, but I'm not sure which. If you find it, you can override it.
Alternatively, your best bet is to rework your code so that you aren't assigning so many variables in the global environment. Wrap most of your code into functions (so most variables only exist for the lifetime of the function call). You can also define a new environment
e <- new.env(parent = globalenv())
Then assign all your results inside e
. That way the refresh only takes a few microseconds.
Upvotes: 8