2014-05-14 70 views
3

早上好,用繩子

我被困在河串和表達式類型轉換我想繪製一條曲線(使用曲線()函數)定義曲線(),有一個公式由一個字符串定義如下:

curve(x^3) 
## Ok, generates a curve as expected 

qq<-"x^3" 
curve(qq) 
Error in UseMethod("qq") : 
no applicable method for 'qq' applied to an object of class "c('double', 'numeric')" 

我可以理解,第一個arg應該是一個表達式。

curve(expr=expression(qq)) 
Error in curve(expr = expression(qq)) : 
    'expr' must be a function, or a call or an expression containing 'x' 

那我不明白:我的表達()的理解,從這個男人,是 「......表達式返回類型矢量‘表達’它的參數包含(未評估)。」

那麼,我必須做什麼來繪製曲線與一個由字符串qq的內容定義的方程?

感謝

JF

回答

3

curve替代在一開始就表達:

substitute(expression(qq)) 
#expression(qq) 

構成本就不能推斷出它需要:

all.vars(substitute(expression(qq))) 
#[1] "qq" 

all.vars(substitute(x^3)) 
#[1] "x" 

我認爲你需要可怕的eval(parse())

x <- 1:10 
qq <- "x^3" 
ff <- as.function(alist(x=, eval(parse(text=qq)))) 
curve(ff) 
+0

的確,您的解決方案可行(謝謝!)。不過,我仍然不確定我是否理解了原因。在這裏,您將字符串轉換爲函數,並使用curve()函數處理函數。沒有什麼不對,但爲什麼不能從字符串qq生成一個表達式,並直接將它用於curve()?我並不介意eval(parse())這麼多,但爲什麼'curve(expr = eval(parse(text = qq)))'或'curve(expr = parse(text = qq))'不起作用? – jfmoyen

+0

閱讀我答案的第一句話。 – Roland

+0

(+1)瞭解'曲線'文檔 –