我创建了一个函数,使得该等式用于在多项式回归中生成回归曲线,但我不能使它在curve()上工作
有功能本身,工作正常。
`$
Curve.equation=function(x)
{
coeffs=x$coefficients
eqq=character()
for(i in 1:length(coeffs))
{
if(i==1){eqq[i]=coeffs[i]}
if(grepl("\\^",names(coeffs[i])))
{
num=grep("\\^",unlist(strsplit(names(coeffs[i]),"")))+1
eqq[i]=ifelse(substring(coeffs[i],1,1)=="-",paste0(coeffs[i],"*x^",substring(names(coeffs)[i],num,num)),paste0("+",coeffs[i],"*x^",substring(names(coeffs)[i],num,num)))
}
if(!grepl("\\^",names(coeffs[i]))&i>1)
{
eqq[i]=ifelse(substring(coeffs[i],1,1)=="-",paste0(coeffs[i],"*x"),paste0("+",coeffs[i],"*x"))
}
}
paste(eqq,collapse="")
}`
模拟数据
`$
fn=function(x)15+2.5*x+2*x^2+x^3+50*rnorm(length(x),100,100)
a=rnorm(200,30,3)
b=fn(a)
plot(b~a)
lmab=lm(b~a+I(a^2)+I(a^3))
`
......这就是我遇到问题的地方。 我试着
$ curve(Curve.equation(lmab),add=TRUE,col="blue")
也
$ curve(eval(parse(text=Curve.equation(lmab))),add=TRUE,col="blue")
,但这两行都归还给我 'expr'必须是一个函数,或一个包含'x'
的调用或表达式答案 0 :(得分:0)
返回长度为1的R字符向量:
Curve.equation(lmab)
[1] "-26488.6153547735+4928.74310702739*x-217.568666179266*x^2+4.00331698261622*x^3"
这将允许您获取该字符值并将其放入“空白”功能对象中。不需要eval
,因为parse
会返回必要的表达式。它执行测试是否可以从该字符值构建有效的R表达式树:
func <- function(x){}
body(func) <- parse(text=Curve.equation(lmab))
> func
function (x)
-26488.6153547735 + 4928.74310702739 * x - 217.568666179266 *
x^2 + 4.00331698261622 * x^3
由于func现在是一个带有一个名为“x”的形式参数的函数,curve
- 函数很高兴:
png(); curve(func, -10,10); dev.off()