我在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:〜
答案 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所述编写脚本,因为这样可以很容易地调试错误。