2017-03-03 39 views
0

ggplot的部分代碼存儲在字符向量中。我想用這個代碼作爲我的ggplot的附加geoms。如何將字符串作爲代碼添加到ggplot對象

例1:

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

到目前爲止,我嘗試:

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 

例2:

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

可能你想知道,爲什麼我會喜歡做的事,在第一地點?在for循環中,我創建了表達式並將它們作爲字符存儲在列表中。稍後,我將所有表達式粘貼到單個字符串表達式中。現在,我想將這個字符串添加到ggplot命令中。有什麼建議麼?

編輯:例1已成功解決。但示例2未解決。

回答

2

parse函數具有文本參數,您需要將a傳遞給。嘗試:

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

此處瞭解詳情: http://adv-r.had.co.nz/Expressions.html#parsing-and-deparsing

在多條語句的情況下,有可能deparse原始表達式,添加新的,然後計算作爲一個整體

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

是的,你是對的,我也嘗試過以前的文本參數,但對於我原來的例子沒有奏效。當字符串中有兩個geom(例如'a ='geom_line()+ geom_line(y = 1)'')時,'eval(parse(text = a))'不起作用。我將用兩個geom參數更新我的問題。 – JerryTheForester

+0

請不要直接編輯問題。將它作爲額外的問題添加到原來的問題之下。我輸入的解決方案實際上並沒有解決你現在遇到的問題:) –

+0

我認爲問題在於eval在將它作爲表達式添加之前試圖對參數進行求和。功能性解決方案似乎會對原始調用進行壓縮,添加表達式並將其作爲一個整體進行評估。 –

相關問題