2014-10-30 15 views
51

Ho uno strano problema con Rstudio: se uno script chiama le funzioni ggplot2 per visualizzare un grafico, quindi utilizzare Source per eseguire lo script non produce i grafici. Se seleziono l'intero script con Ctrl+A, quindi Esegui la riga corrente o la selezione (Ctrl+Enter), quindi la trama fa display. Allo stesso modo, digitando i comandi di tracciamento nella console si ottiene un output corretto.diagrammi ggplot negli script non vengono visualizzati in Rstudio

Ad esempio:

library(ggplot2) 

p = ggplot(mtcars, aes(wt, mpg)) 
p + geom_point() 

servirà solo a produrre un output se incollato in console, se non di provenienza.

Non ci sono altre domande su questo, ma nessuno dei due è utile:

Come posso ottenere Rstudio per visualizzare trame quando uno script è provenienza? Sto usando Rstudio 0.98.1062 e R 3.1.1.

risposta

77

La soluzione è quella di chiamare in modo esplicito il print() oggetto ggplot:

library(ggplot2) 

p <- ggplot(mtcars, aes(wt, mpg)) 
p <- p + geom_point() 
print(p) 

ggplot funzione restituisce oggetto della classe ggplot; ggplot2 funziona sovraccaricando la funzione print per comportarsi diversamente sugli oggetti di classe ggplot - invece di stamparli su STDOUT, crea un grafico.

Tutto funziona correttamente in modalità interattiva, poiché R presuppone che la maggior parte dei comandi venga eseguita tramite la funzione print(). Questo è per nostra comodità e ci consente di digitare rnorm(1) e ottenere qualsiasi risultato visibile. Quando viene utilizzato il comando Esegui selezione corrente (Ctrl+Enter), RStudio si comporta come se ogni riga selezionata fosse stata digitata in modalità interattiva ed eseguita. È possibile verificarlo controllando la cronologia dei comandi nel riquadro Console dopo aver eseguito alcune righe selezionate.

Ma questa comoda modalità viene abbandonata quando il file viene letto da source(). Poiché questa funzione è progettata per eseguire script R (potenzialmente lunghi e computazionalmente costosi), non è auspicabile inquinare STDOUT con messaggi a bassa priorità. Ecco perché source() per impostazione predefinita emetterà solo un messaggio di errore. Se vuoi qualcos'altro, devi chiedere esplicitamente di farlo.

8

anche se è una domanda piuttosto vecchia. Ho avuto lo stesso problema e ho trovato una soluzione rapida, se si desidera utilizzare il pulsante "source" sulla casella di modifica R studio.

si può semplicemente attivare la "fonte con eco" (Ctrl + Shift + Invio) e il grafico mostra come previsto

+0

Grande, non ha saputo che! Ciò si aggiunge alla spiegazione data da @ Mirosław Zalewski. – Uwe

Problemi correlati