Как я пишу код R, который позволяет мне выполнять другой путь в своем коде, если состояние ошибки происходит? Я использую функцию, которая имеет тенденцию бросать ошибку. Когда это встречает состояние ошибки, я хотел бы выполнить другую функцию. Вот определенный пример:
require(SuppDists)
parms <- structure(list(gamma = -0.841109044800762, delta = 0.768672140584442,
xi = -0.359199299528801, lambda = 0.522761187947026, type = "SB"), .Names = c("gamma",
"delta", "xi", "lambda", "type"))
pJohnson(.18, parms)
функция pJohnson должна перестать работать со следующей ошибкой:
Error in pJohnson(0.18, parms) :
Sb values out of range.
Я могу совершить ошибку, идут тихие при помощи:
try( pJohnson(.18, parms), silent=T)
но то, что я действительно хочу сделать, выполняют функцию alternativeFunction()
если pJohnson(.18, parms)
возвращает ошибку.
Это походит withCallingHandlers()
функция должна выручить меня, но я не могу выяснить, как зафиксировать ошибку и заставить ее работать alternativeFunction()
только на состояние ошибки.
t <- try(pJohnson(.18, parms))
if("try-error" %in% class(t)) alternativeFunction()
Другой вариант может быть использован Trycatch
. Вот пример:
vari <- 1
tryCatch(print("passes"), error = function(e) print(vari)) # => passes
tryCatch(stop("fails"), error = function(e) print(vari)) # => 1
Вы можете делать все, что вы хотите в блоке ошибок, поэтому в вашем случае что-то вроде этого должно работать:
tryCatch(pJohnson(.18, parms), error=function(e) alternativeFunction())
Это не на самом деле не предназначено для ошибки, но это немного больше Отказ