R代码:使用非线性求解器时“解析意外的输入结束时出错”

时间:2016-10-17 21:50:44

标签: r parsing nls

我在R中使用非线性求解器(nls),但由于解析器错误我不知道如何调试,因此无法运行我的模型。有人可以就如何解决这个问题提出一些建议吗?

代码:

Bass.nls <- nls( Zt[which(!is.na(Zt))] ~ M * ( ((P+Q)^2 / P) * exp(-(P+Q) * days) ) / (1+(Q/P)*exp(-(P+Q)*days))^2, start = list(M=Z[tInt], P=0.03, Q=0.38), lower = list(Y[tInt], 0,0), upper = list(2e10, 1,1), algorithm = "port", trace = TRUE)

错误:

  

解析时出错(text = x,keep.source = FALSE):     :2:0:意外结束输入   1:〜

2 个答案:

答案 0 :(得分:0)

我的建议是以更易读的形式编写包含调用的脚本,例如

Bass.f <- function(days, M, P, Q) {
  M * (((P + Q)^2 / P) * exp(-(P + Q) * days)) / 
    (1 + (Q / P) * exp(-(P + Q) * days))^2
}

然后你可以调用函数来查看它是否写得正确,比如

Bass.f(1, 100, 0.03, 0.38)

然后尝试拨打电话

Bass.nls <- nls( Zt[which(!is.na(Zt))] ~ Bass.f(days, M, P, Q),
  start = list(M = Z[tInt], P = 0.03, Q = 0.38),
  lower = list(Y[tInt], 0, 0),
  upper = list(2e10, 1, 1),
  algorithm = "port", trace = TRUE)

这仍然会出现同样的错误吗?如果是,查看您正在使用的数据,即

的输出将是有用的
dput(Zt)

Z[tInt]

days

答案 1 :(得分:0)

错误

  

输入意外结束

是由于缺少括号而发生的。您可能忘记了使用结束括号-“)” 结束对函数的调用。

Look at the section 6.4 of this link,以获得更好的解释。


您应该按照Johannes' answer所述编写脚本,因为这样可以很容易地调试错误。