2014-10-30 3 views
51

Ich habe ein seltsames Problem mit Rstudio: Wenn ein Skript ggplot2 Funktionen aufgerufen, um ein Diagramm anzuzeigen, dann Source, um das Skript auszuführen, führt nicht die Plots. Wenn ich das gesamte Skript mit Ctrl+A auswähle, dann Führe die aktuelle Zeile oder Auswahl (Ctrl+Enter) aus, dann zeigt das Diagramm an. Das Eingeben von Zeichenbefehlen in die Konsole erzeugt ebenfalls eine korrekte Ausgabe.ggplot Plots in Skripts nicht in Rstudio angezeigt

Zum Beispiel:

library(ggplot2) 

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

nur Ausgabe erzeugen, wenn in der Konsole eingefügten, nicht, wenn bezogen.

Es gibt noch weitere Fragen zu diesem Thema, aber keiner ist hilfreich:

Wie kann ich Rstudio erhalten Plots angezeigt wird, wenn ein Skript bezogen? Ich benutze Rstudio 0.98.1062 und R 3.1.1.

Antwort

77

Die Lösung ist ausdrücklich print() auf ggplot Objekt aufzurufen:

library(ggplot2) 

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

ggplot Funktion gibt ein Objekt der Klasse ggplot; ggplot2 funktioniert durch Überladen print Funktion, um sich auf Objekte der Klasse ggplot anders zu verhalten - anstatt sie auf STDOUT zu drucken, erstellt es Diagramm.

Im interaktiven Modus funktioniert alles gut, weil R davon ausgeht, dass die meisten Befehle über die Funktion print() ausgeführt werden. Dies ist für unsere Bequemlichkeit und erlaubt uns, rnorm(1) einzugeben und irgendeinen sichtbaren Ausgang zu erhalten. Wenn der Befehl Aktuelle Ausführung ausführen verwendet wird (Ctrl+Enter), verhält sich RStudio so, als ob jede ausgewählte Zeile im interaktiven Modus eingegeben und ausgeführt würde. Sie können dies überprüfen, indem Sie den Befehlsverlauf im Bereich Console überprüfen, nachdem Sie einige ausgewählte Zeilen ausgeführt haben.

Aber dieser bequeme Modus wird aufgegeben, wenn die Datei von source() gelesen wird. Da diese Funktion (möglicherweise lange und rechenintensive) R-Skripte ausführen soll, ist es nicht wünschenswert, STDOUT mit Nachrichten niedriger Priorität zu belasten. Deshalb gibt source() standardmäßig nur eine Fehlermeldung aus. Wenn Sie etwas anderes wollen, müssen Sie explizit darum bitten.

8

obwohl es eine ziemlich alte Frage ist. Ich hatte das gleiche Problem und fand eine schnelle Lösung, wenn Sie die Schaltfläche "source" in der R Studio Bearbeitungsbox verwenden möchten.

Sie können einfach einschalten „Quelle mit echo“ (Strg + Umschalt + Enter) und das Diagramm zeigt, wie

+0

Groß erwartet, wusste nicht, dass! Das ist eine schöne Erklärung von @ Mirosław Zalewski. – Uwe