gpt4 book ai didi

r - 使用try和tryCatch无法避免/跳过错误

转载 作者:行者123 更新时间:2023-12-03 07:54:21 26 4
gpt4 key购买 nike

我在nlsLM中有一个for loop,因为我想尝试其他start values以适合我的数据。我已经知道一些start values会生成此error:singular gradient matrix at initial parameter estimates,但是我想跳过此error并继续loop,使回归与下一个start values相适应。我试图将所有for loop放入trytryCatch块中,设置silence=TRUE,但是当singular gradient matrix at initial parameter estimates error出现时,代码仍然停止。

有人可以帮我吗?

这是代码:

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

#fit model with nlsLM
#blah, blah, blah
}}
},silent=FALSE)

最佳答案

要了解该问题,您需要了解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是“try-error”类的对象,而下面的代码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)

关于r - 使用try和tryCatch无法避免/跳过错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29001596/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com