如果出现错误情况,如何编写允许我在代码中执行不同路径的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()
。
答案 0 :(得分:44)
t <- try(pJohnson(.18, parms))
if("try-error" %in% class(t)) alternativeFunction()
答案 1 :(得分:15)
另一种选择可能是使用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())
这不是错误的预期用法,但它更简洁一点。