首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将类型"language“转换为"expression”

将类型"language“转换为"expression”
EN

Stack Overflow用户
提问于 2013-04-01 03:14:00
回答 2查看 1.4K关注 0票数 3

我是R的新手,我经常被其他语言中不存在或不需要的数据结构所困扰。

目前,我正在尝试将"language“类型的对象转换为"expression”类型的对象,以便对其进行绘图。

首先,我创建要绘制的函数:

代码语言:javascript
复制
> 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":

代码语言:javascript
复制
> modelsym  
0.958945264470923 + -0.463676594301167 * exp(-0.155697065390677 * x)  
> typeof(modelsym)  
[1] "language"

如果我尝试绘制这条曲线:

代码语言:javascript
复制
> curve(modelsym)  
Error in eval(expr, envir, enclos) : could not find function "modelsym"

但是,如果我复制并粘贴它,它就可以正常工作:

代码语言:javascript
复制
> curve(0.958945264470923 + -0.463676594301167 * exp(-0.155697065390677 * x))  
**[plot appears here]**

我已经尝试过as(modelsym,expression)了,但是没有用。

如何将我的object modelsym转换为expression以便绘制它?

EN

回答 2

Stack Overflow用户

发布于 2013-04-01 03:40:45

这不是一个完整的解决方案,但我已经接近了:

代码语言:javascript
复制
do.call(curve, list(expr = modelsym))

它基本上安排了对curve的调用,并将expr参数设置为modelsym的内容。

您尝试失败的原因是curve的第一行是

代码语言:javascript
复制
sexpr <- substitute(expr)

当传递一个包含语句的对象(实际上是任何对象)时,结果如下:

代码语言:javascript
复制
Browse[2]> sexpr
modelsym
Browse[2]> is.call(sexpr)
[1] FALSE
Browse[2]> is.expression(sexpr)
[1] FALSE

这两个测试是curve用来检查输入是否可接受的。

无论您传递给curve的是什么,它都需要是一个实际的语句,而不是一个包含该语句的调用。

票数 3
EN

Stack Overflow用户

发布于 2013-04-01 20:40:49

另一种攻击计划是使用预测:

代码语言:javascript
复制
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)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15733426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档