【发布时间】:2018-07-01 15:13:48
【问题描述】:
这是我的代码。它会产生无限循环,因为something 变量的值不会在捕获的错误内改变。应该是这样吗?如何修复它以使 something 的值更改为 FALSE?
something <- TRUE
counter <- 1
while(something){
print(counter)
tryTest = tryCatch(
{
arima(rep(1,3), order = c(1,0,0))
},
warning = function(w) {
print('this is warning')
print(w)
},
error = function(e) {
something <- FALSE
print('this is error')
print(e)
},
finally = {}
)
counter <- (counter +1)
}
【问题讨论】:
-
定义你的警告函数为:
warning = function(w) { something <<- FALSE print('this is warning') print(w) },其中""这个操作符将变量分配给父作用域。它首先在父作用域中查找变量,然后如果找不到,则在父范围内创建一个新的。" - studytrails.com/r/core/assignmentoperator -
@nadizan,我刚试了,还是不行,还是死循环
-
@nadizan 您的建议的问题是 lambda 的父范围仍在 tryCatch 函数内,而不是外部范围。
-
作为旁注。出错时,错误函数的返回值由
tryCatch出错时返回。你总是可以用它来停止你的循环。tryTest的条件为非 NULL 以继续您的循环。只要确保在警告中返回非空值即可。
标签: r error-handling try-catch