使用try和tryCatch避免/跳过错误

时间:2015-03-12 03:55:33

标签: r for-loop error-handling try-catch nls

我在nlsLM中有一个for loop,因为我想尝试使用不同的start values来填充我的数据。我已经知道有些start values会生成此errorsingular gradient matrix at initial parameter estimates,但我想跳过此error并继续使用loop,使回归符合下一个start values。我尝试将所有for loop放在trytryCatch块中,设置silence=TRUE,但代码仍在singular gradient matrix at initial parameter estimates {{1}时停止发生。

有人可以帮我这个吗?

以下是代码:

error

1 个答案:

答案 0 :(得分:1)

要了解问题,您需要了解try()的工作原理。具体来说,try将运行代码,前提是它的第一个参数,直到代码在其上完成或直到遇到错误为止。 try()执行的特殊事情是,如果代码中存在错误,它将捕获该错误(不运行其中的其余代码的第一个参数)和(1)返回该错误和普通的R对象,以及(2)在运行try()语句后允许代码。例如:

x <- try({
    a = 1  # this line runs
    stop('arbitrary error') # raise an explicit error
    b = 2  # this line does not run
})
print('hello world') # this line runs despite the error

请注意,在上面的代码中,x是类&#39; try-error&#39;的对象,而在下面的代码中,x等于2(块的最后一个值):

x <- try({
    a = 1  # this line runs
    b = 2  # this line runs too
})

获取返回允许您通过inherits(x,'try-error')测试是否存在错误。

这对你有什么用,我很确定你只想包括在内 在try() statemetn中的for循环中运行的块,如:

for (scp.loop in scp.matrix)
    for (fit.rate in 1:10)
        try({ 
            print(scp.loop)
            print(fit.rate)

            blah, blah, blah, 

            else{coeff.poly.only.res<<-coef(polyfitted.total)}
        },silent=FALSE)