2017-12-29 12 views
-1

Ich habe Probleme mit dem Druckverhalten von R, wenn ich eine Funktion erstelle. Ich möchte eine Funktion schreiben, die ein ggplot generiert und dieses Diagramm in der Reihenfolge zurückgibt, um es später zu speichern.Geben Sie die ggplot2-Zahl aus der Quellfunktion zurück

So sollte es in etwa so aussehen

file: func.R 

make_plot <- function(data){ 
p <- ggplot(...) 
print(p) 
return(p) 
} 


source('func.R') 
p <- make_plot(data) 
ggsave('somewhere.png', plot=p) 

mein Problem ist, dass die erzeugten Diagramme leer sind, und ruft Druck (p) außerhalb der Funktion erzeugt ein leeres Grundstück auch.

Wenn ich den Code innerhalb der Funktion interaktiv ausführen, ist alles in Ordnung.

Irgendwelche Ideen?

+1

Können Sie die Daten zur Verfügung stellen, die Sie in make_plot verwendet haben? Ist der Aufruf von ggplot in dieser Funktion wirklich nur ggplot (...)? oder ist da mehr dran? – jrlewi

+3

Ich kann das Problem nicht reproduzieren. Wenn ich Ihre "ggplot" -Zeile in der Funktion durch 'p <- ggplot (Daten, aes (x = wt, y = mpg)) + geom_point()' ersetzt habe, dann funktioniert 'p = make_plot (mtcars)' ganz gut. Bitte geben Sie genügend Code ein, um das Problem zu reproduzieren. – Gregor

+0

Arbeiten Sie mit RStudio? Funktioniert der Code innerhalb der Funktion auch nach dem Neustart der R-Sitzung? –

Antwort

0

danke für Ihre schnellen Antworten. Ich bin sehr leid, aber der Fehler war ganz auf meiner Seite, sah der eigentliche Code so etwas wie

file: func.R 
    make_plot <- function(data){ 
    p <- ggplot(...) 
    p + geom_vline ... 
    print(p) 
    return(p) 
    } 

    source('func.R') 
    p <- make_plot(data) 
    ggsave('somewhere.png', plot=p) 

So ist das neu abgestimmte Grafikobjekt wirklich nur leer war. Es hätte offensichtlich

gewesen
p <- ggplot(...) 
p <- p + geom_vline ... 

vielen Dank!

Verwandte Themen