我在nlsLM
中有一个for loop
,因为我想尝试使用不同的start values
来填充我的数据。我已经知道有些start values
会生成此error
:singular gradient matrix at initial parameter estimates
,但我想跳过此error
并继续使用loop
,使回归符合下一个start values
。我尝试将所有for loop
放在try
和tryCatch
块中,设置silence=TRUE
,但代码仍在singular gradient matrix at initial parameter estimates
{{1}时停止发生。
有人可以帮我这个吗?
以下是代码:
error
答案 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)