如何編寫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()
。
明顯是我沒有想到「對象」足夠的情況。感謝您的快速響應! – 2010-01-28 23:45:19
'if(inherits(t,「try-error」))alternativeFunction()'是一個不錯的選擇,它比'%in%'更加'對象'。 – 2010-01-28 23:55:12
好點。 s3類的對象抽象層非常透明,我幾乎忘記它在那裏。 – 2010-01-29 06:44:20