Is there any way to disable environment pane in RS

2019-04-20 06:56发布

问题:

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:

  1. Customize RStudio sources to add an option to disable Environment pane.
  2. Frequently clean global environment (not convinient because raw data needs time-consuming preprocessing and I often change preprocessing logic).
  3. Maybe there're specific types of objects that causing the lag not because of their size but because of their structure?

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.

回答1:

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.



标签: r rstudio