我是R的新手,我经常被其他语言中不存在或不需要的数据结构所困扰。
目前,我正在尝试将"language“类型的对象转换为"expression”类型的对象,以便对其进行绘图。
首先,我创建要绘制的函数:
> model <- nls(y~a+b*exp(x*z),start = list(a=1, b = -.5, z = -.8),data=results)
> modelsym <- substitute(a+b*exp(z*x), list(a=coef(model[1],b=coef(model)[2],z=coef(model)[3]))该函数的类型为"language":
> modelsym
0.958945264470923 + -0.463676594301167 * exp(-0.155697065390677 * x)
> typeof(modelsym)
[1] "language"如果我尝试绘制这条曲线:
> curve(modelsym)
Error in eval(expr, envir, enclos) : could not find function "modelsym"但是,如果我复制并粘贴它,它就可以正常工作:
> curve(0.958945264470923 + -0.463676594301167 * exp(-0.155697065390677 * x))
**[plot appears here]**我已经尝试过as(modelsym,expression)了,但是没有用。
如何将我的object modelsym转换为expression以便绘制它?
发布于 2013-04-01 03:40:45
这不是一个完整的解决方案,但我已经接近了:
do.call(curve, list(expr = modelsym))它基本上安排了对curve的调用,并将expr参数设置为modelsym的内容。
您尝试失败的原因是curve的第一行是
sexpr <- substitute(expr)当传递一个包含语句的对象(实际上是任何对象)时,结果如下:
Browse[2]> sexpr
modelsym
Browse[2]> is.call(sexpr)
[1] FALSE
Browse[2]> is.expression(sexpr)
[1] FALSE这两个测试是curve用来检查输入是否可接受的。
无论您传递给curve的是什么,它都需要是一个实际的语句,而不是一个包含该语句的调用。
发布于 2013-04-01 20:40:49
另一种攻击计划是使用预测:
model <- nls(y~a+b*exp(x*z),start = list(a=1, b = -.5, z = -.8),data=results)
modelf <- function(x) predict(model, newdata = data.frame(x = x))
plot(modelf)
curve(modelf)https://stackoverflow.com/questions/15733426
复制相似问题