2014-05-14 51 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)了解'曲线'文档 –