2015-06-11 9 views
10

Introduzione:C'è un modo per disabilitare il riquadro dell'ambiente in RStudio?

Ho un progetto RStudio dove sto ricercando (abbastanza) di grandi insiemi di dati. Anche se sto cercando di mantenere pulito l'ambiente globale, dopo qualche tempo si riempie di oggetti enormi.

Problema:

RStudio rinfresca sempre riquadro Ambiente dopo il debug (probabilmente itera ambiente globale e invita summary() su ogni oggetto), e ci vogliono decine di secondi sul mio ambiente globale. Sebbene l'aggiornamento sia asincrono, la sessione R è occupata e devi attendere che finisca prima di poter continuare a lavorare. Ciò rende il debug molto fastidioso. E non c'è modo che io sappia di disabilitare il riquadro Ambiente in RStudio.

Domanda:

Qualcuno può suggerire bella soluzione di questo? Vedo le seguenti possibilità:

  1. Personalizzare le origini RStudio per aggiungere un'opzione per disabilitare il riquadro Ambiente .
  2. Ambiente globale spesso pulito (non conveniente poiché i dati grezzi richiedono una preelaborazione che richiede molto tempo e spesso cambio la logica di preelaborazione).
  3. Forse ci sono tipi specifici di oggetti che causano il ritardo non a causa delle loro dimensioni ma a causa della loro struttura?

Attualmente sto lavorando su un esempio riproducibile, ma non è chiaro quali oggetti causino il problema.

Ho inviato via email il supporto RStudio a tale problema qualche tempo fa, ma non ho ancora ricevuto alcuna risposta.

+2

Si prega di aggiungere ulteriori dettagli per riprodurlo. Come stai facendo il debug? Accade quando ci sono alcuni oggetti di grandi dimensioni (il problema è la memoria, o forse la lettura di oggetti), o molti piccoli oggetti (il problema è ottenere la struttura degli oggetti)? Fa la differenza se il pannello dell'ambiente è nascosto (cioè, stai guardando i riquadri Storia o Crea)? –

+0

Sto impostando il punto di interruzione in RStudio su qualsiasi riga di codice, lanciando lo script/la funzione - l'esecuzione si ferma sul punto di interruzione, quindi premo il pulsante "Stop" o "Continua", l'esecuzione termina e il GIF "rinfrescante" appare in cima all'ambiente riquadro, durante il quale nessuno dei comandi R funziona e il processo RSession.exe richiede il 100% di CPU (single core). Quindi, non penso sia legato alla memoria. Ho provato a comprimere il riquadro dell'ambiente, senza alcun effetto, penso che si aggiorni comunque. Il mio ambiente contiene un centinaio di oggetti, alcuni grandi xts, grandi liste (di liste), grandi matrici. – cyberj0g

+0

Aggiungi il tuo supporto per un'opzione disabilitata qui: https://support.rstudio.com/hc/en-us/community/posts/212941327-Feature-request-Option-to-disable-environment-viewer – kennyB

risposta

7

Posso riprodurre il problema con molte piccole variabili di lista annidate.

# 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 

Questo suggerisce che il problema è RStudio esecuzione del suo equivalente ls.str() sull'ambiente globale.

Sospetto che il comportamento sia implementato in una delle funzioni elencate da ls("tools:rstudio", all.names = TRUE), ma non sono sicuro di quale. Se lo trovi, puoi sostituirlo.

In alternativa, la soluzione migliore è rielaborare il codice in modo da non assegnare così tante variabili nell'ambiente globale. Avvolgi la maggior parte del tuo codice in funzioni (quindi la maggior parte delle variabili esiste solo per la durata della chiamata alla funzione). È inoltre possibile definire un nuovo ambiente

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

Poi assegnare tutti i risultati all'interno e. In questo modo l'aggiornamento richiede solo pochi microsecondi.

+2

Grande, quel codice riproduce il problema! Si noti che il riquadro dell'ambiente si aggiorna di circa 7 secondi (sul mio i5 4670), ma 'ls' funziona all'istante. Penso che sia chiaro problema di RStudio. 1000 elenchi di elenchi possono davvero essere considerati un grande ambiente globale? Ho scavato nelle sorgenti di RStudio e no, il riquadro dell'ambiente non usa alcuna funzione dagli strumenti: rstudio, chiama l'implementazione interna di R 'ls' all'interno del processo di RSession attraverso molti wrapper, e quindi itera i risultati. Quindi penso che la risposta sia no, non c'è modo di disabilitare il pannello dell'ambiente senza modificare il codice RStudio. – cyberj0g

+0

@ cyberj0g 1000 variabili sembra molto. Come ho detto nella risposta, se si sta eseguendo il wrapping del codice nelle funzioni, alcune di esse dovrebbero scomparire. E potresti stare meglio con una diversa struttura dei dati. Una sola lista di liste di liste, forse. –

Problemi correlati