如何将表达式的变量传递给curve()作为其等式?

时间:2013-10-17 14:26:52

标签: r

我有以下代码:

e <- expression(x^2+3*x-3)

我想使用R的符号导数函数D绘制一阶导数图:

curve(D(e), from=0, to=10)

但后来我收到以下错误:

Error in curve(expression(e), xname = "x", from = 0, to = 3000) : 
     'expr' must be a function, or a call or an expression containing 'x'

我试图将D(e)包装在对eval()的调用中,但无济于事。

再试一次:

substitute(expression(x^2+3*x-3), list(x=3))

结果,如预期的那样:

 expression(3^2+3*3-3)

可是:

 substitute(e, list(x=3))

结果:

 e

发生了什么事?我怎样才能使这个工作?

2 个答案:

答案 0 :(得分:5)

它有点笨重但是

eval(substitute(curve(y),list(y=D(e,"x"))))

似乎有效。

也是如此
do.call(curve,list(D(e,"x")))

答案 1 :(得分:3)

函数更易于操作和测试:

e <- expression(x^2+3*x-3)
de <- D(e, 'x')
fde <- function(x) eval(de)

curve(fde, from=0, to=10)