2015-06-11 18 views
10

Wstęp:Czy istnieje sposób na wyłączenie panelu środowiska w aplikacji RStudio?

Mam projekt RStudio gdzie jestem badania (rzetelnie) dużych zestawów danych. Chociaż staram się zachować czystość globalnego środowiska, po pewnym czasie staje się on wypełniony ogromnymi obiektami.

Problem:

RStudio zawsze odświeża panel Environment po debugowania (prawdopodobnie iteracje globalnego środowiska i wzywa summary() na każdego obiektu), a to trwa kilkadziesiąt sekund w moim otoczeniu globalnym. Chociaż samo odświeżanie jest asynchroniczne, sesja R jest zajęta i przed jej kontynuacją musisz poczekać, aż się zakończy. To sprawia, że ​​debugowanie jest bardzo irytujące. I nie ma mowy o wyłączenie panelu Environment w RStudio.

Pytanie:

Czy ktoś może sugerować jakiegokolwiek piękne obejście tego? Widzę następujące możliwości:

  1. Dostosuj źródła RStudio, aby dodać opcję wyłączenia panelu Środowisko .
  2. Często czyste środowisko globalne (nie jest to rozwiązanie przekonujące, ponieważ nieprzetworzone dane wymagają czasochłonnego przetwarzania i często zmieniam logikę przetwarzania wstępnego).
  3. Może istnieją specyficzne typy obiektów, które powodują opóźnienie nie ze względu na ich rozmiar, ale ze względu na ich strukturę?

Pracuję teraz nad powtarzalnym przykładem, ale nie jest jasne, które obiekty powodują problem.

Wysłałem e-mailem do wsparcia RStudio na temat tego problemu jakiś czas temu, ale nie otrzymałem jeszcze żadnej odpowiedzi.

+2

Proszę dodać więcej szczegółów, aby to odtworzyć. Jak sobie radzisz z debugowaniem? Czy dzieje się tak, gdy masz kilka dużych obiektów (problem to pamięć, a może przedmioty do czytania) lub wiele małych obiektów (problemem jest uzyskanie struktury obiektów)? Czy ma to wpływ na to, czy panel środowiska jest ukryty (tzn. Czy przeglądasz panele historii lub budowania)? –

+0

Ustawiam punkt przerwania w RStudio na dowolnym wierszu kodu, uruchamiając skrypt/funkcję - wykonywanie zatrzymuje się w punkcie przerwania, następnie naciskam przycisk "Stop" lub "Kontynuuj", wykonywanie się kończy, a "odświeżający" GIF pojawia się na środowisku Okienko, podczas gdy żaden z poleceń R nie działa, a proces RSession.exe zajmuje 100% (jednego rdzenia) procesora. Dlatego nie sądzę, że jest to związane z pamięcią. Próbowałem zwinąć okienko środowiska bez żadnego efektu, myślę, że i tak odświeża. Moje środowisko zawiera około stu obiektów, niektóre z nich to duże xts, duże listy (listy), duże macierze. – cyberj0g

+0

Dodaj tutaj wsparcie dla opcji wyłączenia: https://support.rstudio.com/hc/en-us/community/posts/212941327-Funkcja-request-Option-to-disable-environment-viewer – kennyB

Odpowiedz

7

Mogę odtworzyć problem z wieloma małymi zagnieżdżonymi zmiennymi list.

# 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 

To sugeruje, że problem jest RStudio prowadzi swój odpowiednik ls.str() na globalnym środowisku.

Podejrzewam, że zachowanie jest zaimplementowane w jednej z funkcji wymienionych przez ls("tools:rstudio", all.names = TRUE), ale nie jestem pewien, który. Jeśli ją znajdziesz, możesz ją przesłonić.

Alternatywnie, najlepiej przerobić swój kod, aby nie przypisywać tylu zmiennych w środowisku globalnym. Zawiń większość kodu do funkcji (więc większość zmiennych istnieje tylko przez całe życie wywołania funkcji). Można również zdefiniować nowe środowisko

e <- new.env(parent = globalenv()) 

Następnie przypisać wszystkie wyniki wewnątrz e. W ten sposób odświeżanie zajmuje tylko kilka mikrosekund.

+2

Świetnie, ten kod odtwarza problem! Zauważ, że panel środowiska odświeża się około 7 sekund (w moim i5 4670), ale 'ls' działa natychmiast. Myślę, że to jasny problem z RStudio. Czy 1000 list list można naprawdę uznać za duże globalne środowisko? Wkopałem się w źródła RStudio i nie, panel środowiska nie korzysta z żadnych funkcji z narzędzi: rstudio, nazywa wewnętrzną implementacją R 'ls' w procesie RSession przez wiele wrapperów, a następnie iteruje wyniki. Więc myślę, że odpowiedź brzmi: nie, nie ma możliwości wyłączenia panelu środowiska bez zmiany kodu RStudio. – cyberj0g

+0

@ cyberj0g 1000 zmiennych brzmi jak dużo. Tak jak powiedziałem w odpowiedzi, jeśli owijasz kod w funkcje, to niektóre z nich powinny zniknąć. I może ci się lepiej przydać inna struktura danych. Może jedna lista list. –

Powiązane problemy