#r
#r
Вопрос:
Я пытаюсь написать обработку исключений ошибок в R, используя tryCatch.
correct = 1
tryCatch({
sqrt(b)
},
warning = function(w){
print("NaNs")
},
finally = {
correct = 0
}
)
correct
Если я устанавливаю b = -5, выводится предупреждение, а значение correct равно 0. Если я установил b = 5, предупреждение не выводится. Однако значение по-прежнему равно 0. Я бы хотел, чтобы при обнаружении какого-либо предупреждения / ошибки значение correct было равно 0. Когда нет предупреждения / ошибки, значение correct равно 1. Спасибо!
Ответ №1:
Вы не хотите 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
Ответ №2:
Вот функция:
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
Ответ №3:
finally
Предложение выполняется независимо от того, выдается ли предупреждение в квадратном корне. Вот почему вы в конечном итоге получаете correct == 0
независимо.
Следующий код будет делать то, что вы хотите, хотя я использовал глобальное присвоение <<-
, которое может вызвать проблемы, если вы не будете осторожны. Это было необходимо, потому что в противном случае вы не сможете изменить значение correct
из warning
функции.
correct = 1
tryCatch({
sqrt(b)
},
warning = function(w){
print("NaNs")
correct <<- 0
}
)