我正在尝试使用tryCatch在R中编写一个错误异常处理。
correct = 1
tryCatch({
sqrt(b)
},
warning = function(w){
print("NaNs")
},
finally = {
correct = 0
}
)
correct如果我设置b= -5,则打印警告,并且正确的值为0。如果我设置b= 5,则不会打印警告。但是,该值仍然为0。我想要的是,当有一些警告/错误需要捕获时,正确的值是0。当没有警告/错误时,正确的值为1。谢谢!
发布于 2014-06-20 04:34:32
你不会想让finally在这里的。相反,只要在发生错误或警告时指定返回值0即可。
myfun <- function(b) {
tryCatch({
sqrt(b)
},
error = function(e){
return(0)
},
warning = function(w){
return(0)
}
)
}
> myfun(5)
# [1] 2.236068
> myfun(-5)
# [1] 0发布于 2014-06-20 04:34:48
下面是一个函数:
is.bad <- function(x) {
as.numeric(isTRUE(tryCatch(x,
error = function(c) TRUE,
warning = function(c) TRUE
)))
}
is.bad(stop())
is.bad(warning())
is.bad(message())
is.bad(3)
## > is.bad(stop())
## [1] 1
## > is.bad(warning())
## [1] 1
## > is.bad(message())
##
## [1] 0
## > is.bad(3)
## [1] 0发布于 2014-06-20 04:39:53
无论是否在平方根中抛出警告,都会执行finally子句。这就是为什么你会不顾一切地使用correct == 0的原因。
尽管我使用了一个全局赋值<<-,但是下面的代码可以做你想做的事情,如果你不小心的话可能会导致问题。这是必要的,因为否则就不能在warning函数中更改correct的值。
correct = 1
tryCatch({
sqrt(b)
},
warning = function(w){
print("NaNs")
correct <<- 0
}
)https://stackoverflow.com/questions/24315626
复制相似问题