我正在尝试使用
nls
函数拟合非线性模型。该模型具有调节功能并按组工作,因此我尝试实现一个涵盖 300 多种起始值组合的循环。我正在使用 tryCatch
但令我惊讶的是循环崩溃了,我猜是因为起始值或下限和上限。
tryCatch(
for(r in 1:nrow(st4)){
halfLE3[[r]] <- nls(
inty ~ I(time < (position/velocity) + dinitial) * Inty_S0 +
(time >= (position/velocity) + dinitial) *
I(Intyf[probe] + (Inty_S0[probe] - Intyf) *
(exp(-Decay * (time - (position/velocity) + dinitial)))),
data = Data4,
algorithm = "port",
control = list(warnOnly = TRUE),
start = list(Decay=st4[r,3], dinitial=st4[r,2],
Intyf=rep(st4[r,4], length(levels(Data4$probe))),
Inty_S0=rep(st4[r,5], length(levels(Data4$probe))),
velocity=st4[r,1]),
lower = list(Decay= .1, dinitial=0.1, velocity=10, Intyf=0.1, inty_S0=.5),
upper = list(Decay= 1, dinitial=10, velocity=8000, Intyf=1, inty_S0=1.5)
)
}
,error = function(e) {e}
)
st4 是一个具有 300 种起始值组合的数据帧。 探针指的是组。
你知道为什么即使使用
tryCatch
循环也会崩溃吗?你知道我可以改进什么吗?我使用 nls.control
更改 maxiter 和其他参数,但其工作原理与我上面使用的控件相同。
如果有任何建议,我将非常感激。
我解决了这个问题。 tryCatch 应该位于添加括号的 for 循环内部。
for(r in 1:nrow(st4)){
tryCatch({
nls()......
},error = function(e) {e}
)
}