nls 适合时 tryCatch 崩溃

问题描述 投票:0回答:1

我正在尝试使用

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 和其他参数,但其工作原理与我上面使用的控件相同。

如果有任何建议,我将非常感激。

conditional-statements try-catch nls
1个回答
0
投票

我解决了这个问题。 tryCatch 应该位于添加括号的 for 循环内部。

for(r in 1:nrow(st4)){

tryCatch({
nls()......

},error = function(e) {e}
)
}
© www.soinside.com 2019 - 2024. All rights reserved.