it-swarm.com.de

pG-Plots in Skripten werden in Rstudio nicht angezeigt

Ich habe ein seltsames Problem mit Rstudio: Wenn ein Skript ggplot2-Funktionen zum Anzeigen eines Diagramms aufruft, werden mit Source das Skript nicht ausgeführt. Wenn ich das gesamte Skript mit Ctrl+A auswähle, dann Aktuelle Zeile ausführen oder Auswahl (Ctrl+Enter), wird der Plot angezeigt. Wenn Sie Plottbefehle in die Konsole eingeben, wird eine korrekte Ausgabe erzeugt.

Zum Beispiel:

library(ggplot2)

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

Erzeugt nur dann eine Ausgabe, wenn sie in die Konsole eingefügt wird, nicht wenn sie als Quelle verwendet wird.

Es gibt andere Fragen dazu, aber keine ist hilfreich:

Wie kann ich Rstudio dazu bringen, Plots anzuzeigen, wenn ein Skript verwendet wird? Ich benutze Rstudio 0.98.1062 und R 3.1.1.

60
Superbest

Ich habe kürzlich diese Frage beantwortet und festgestellt, dass der aktuellste Weg ist, show(p) aufzurufen, nachdem das Diagramm erstellt wurde.

0
Superbest

Die Lösung ist, explizit print() für das Objekt ggplot aufzurufen:

library(ggplot2)

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

ggplot Funktion gibt ein Objekt der Klasse ggplot zurück; ggplot2 funktioniert durch Überladen der print-Funktion, um sich auf Objekten der Klasse ggplot anders zu verhalten - anstatt sie in STDOUT zu drucken, wird ein Diagramm erstellt.

Im interaktiven Modus funktioniert alles gut, da R davon ausgeht, dass die meisten Befehle über die Funktion print() ausgeführt werden. Dies dient unserer Bequemlichkeit und ermöglicht es uns, rnorm(1) einzugeben und sichtbare Ausgaben zu erhalten. Wenn der Befehl zur Auswahl des aktuellen Befehls verwendet wird (Ctrl+Enter), verhält sich RStudio so, als wäre jede ausgewählte Zeile im interaktiven Modus eingegeben und ausgeführt worden. Sie können dies überprüfen, indem Sie Ihren Befehlsverlauf in Console überprüfen, nachdem Sie einige ausgewählte Zeilen ausgeführt haben.

Dieser praktische Modus wird jedoch aufgegeben, wenn die Datei von source() gelesen wird. Da diese Funktion dazu bestimmt ist, R-Skripts auszuführen (möglicherweise langwierig und rechenintensiv), ist es nicht wünschenswert, STDOUT mit Nachrichten mit niedriger Priorität zu verschmutzen. Deshalb gibt source() standardmäßig nur eine Fehlermeldung aus. Wenn Sie etwas anderes wünschen, müssen Sie explizit danach fragen.

96

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

sie können einfach "Quelle mit Echo" (Strg + Umschalttaste + Eingabetaste) einschalten und der Plot wird wie erwartet angezeigt

14
bcat