2017-03-03 2 views
0

Ein Teil meines Codes für ggplot ist in einem Zeichenvektor gespeichert. Ich möchte diesen Code als zusätzliche Geoms für meinen ggplot verwenden.So fügen Sie dem Objekt ggplot eine Zeichenfolge als Code hinzu

Example1:

DF=data.frame(x=seq(1:10), y=seq(1:20)) 
    a='geom_line()'# This is a string that should be converted to RCode 

Bisher habe ich versucht:

ggplot(DF, aes(x,y))+geom_point()+a 
Error: Don't know how to add a to a plot 

ggplot(DF, aes(x,y))+geom_point()+as.name(a) 
Error: Don't know how to add as.name(a) to a plot 

ggplot(DF, aes(x,y))+geom_point()+eval(parse(text=a)) 
Error in geom_line() + geom_line(y = 1) : 
non-numeric argument to binary operator 

ggplot(DF, aes(x,y))+geom_point()+deparse(substitute(a)) 
Error: Don't know how to add deparse(substitute(a)) to a plot 

Beispiel 2:

DF=data.frame(x=seq(1:10), y=seq(1:20)) 
a='geom_line()+geom_line(y=1)' 

Wahrscheinliche Sie sich fragen, warum ich, dass in einem ersten tun möchten Ort? In einer for-Schleife habe ich Ausdrücke erstellt und in einer Liste als Zeichen gespeichert. Später fügte ich alle Ausdrücke in einen einzigen String-Ausdruck ein. Nun möchte ich diese Zeichenfolge einem ggplot-Befehl hinzufügen. Irgendwelche Vorschläge?

Bearbeiten: Beispiel 1 wurde erfolgreich gelöst. Aber Beispiel 2 bleibt ungelöst.

Antwort

2

Die parse Funktion hat einen Textargument, den Sie an a übergeben müssen. Versuchen:

ggplot(DF, aes(x,y)) + geom_point() + eval(parse(text = a))

Mehr Infos hier: http://adv-r.had.co.nz/Expressions.html#parsing-and-deparsing

Bei mehreren Aussagen ist es möglich, den ursprünglichen Ausdruck Deparse, fügen Sie den neuen und dann bewerten als Ganzes

original <- deparse(quote(ggplot(DF, aes(x,y)) + geom_point())) 
new_call <- paste(original, '+', a) 
eval(parse(text = new_call)) 
+0

Ja, du hast recht, und ich habe es auch mit dem Textargument versucht, aber für mein originales Beispiel hat das nicht funktioniert. Wenn zwei Geome (z. B. "a = 'geom_line() + geom_line (y = 1)'") in einer Zeichenfolge vorhanden sind, funktioniert 'eval (parse (text = a))' nicht. Ich werde meine Frage mit zwei Geom-Argumenten aktualisieren. – JerryTheForester

+0

Bearbeiten Sie die Frage nicht direkt. Fügen Sie es als ein zusätzliches Problem unterhalb des ursprünglichen hinzu. Die Lösung, die ich einfüge, löst nicht wirklich das Problem, das Sie jetzt haben :) –

+0

Ich denke, das Problem ist, dass das Eval versucht, die Parameter zu summieren, bevor es als Ausdruck hinzugefügt wird. Eine funktionale Lösung scheint den ursprünglichen Aufruf zu entäpseln, den Ausdruck hinzuzufügen und ihn dann als Ganzes zu bewerten. –

Verwandte Themen