循环的问题已经解决,非常开心,将代码提供:
<br />
i <- 1<br />
repeat {<br />
x.inv <- try(nls(mean ~ A*(1 - B*exp(-k*day))^3,<br />
start = list(A = i, B = 0.5, k = 0.6), data = mean.w),<br />
silent = TRUE) #用try()函数,并且设定silent = TRUE,也即追踪但忽略可能的错误。<br />
if ("try-error" %in% class(x.inv)) { #如果出现错误,那么就将初始参数加1,并进入下一循环,直到得到正确的初始参数<br />
i <- i + 1<br />
next<br />
} else {<br />
break #得到正确初始参数,也即程序没有检查到错误,那么就结束循环。<br />
}<br />
}<br />
这样得到的 i 值为58。将58带入初始参数,OK,程序运行成功。感谢循环的“暴力破解”,我刚验证过,57、59都不行,人工试谁会想到58?
<br />
nls.sol <- nls(mean ~ A*(1 - B*exp(-k*day))^3,<br />
start = list(A = 58, B = 0.5, k = 0.6),<br />
data = mean.w)<br />
nls.sum <- summary(nls.sol)<br />
nls.sum$parameters<br />
结果:
[data]
Estimate Std. Error t value Pr(>|t|)
A 175.03042385 73.386532191 2.385048 3.617679e-02
B 1.16480280 0.130064900 8.955551 2.200144e-06
k 0.01852205 0.005563022 3.329494 6.717270e-03
[/data][s:11]
</p>