从try,tryCatch或类似的方式返回逻辑TRUE / FALSE?

时间:2013-01-22 23:12:01

标签: r error-handling try-catch

如果给出错误,R中是否有一个返回“FALSE”的函数,否则返回“TRUE”?或者沿着这些方向做某事,或者我是否需要通过评估像ifelse(class(try(stop())) == "try-error", FALSE, TRUE)这样的东西来创建自己的东西?

2 个答案:

答案 0 :(得分:5)

我不得不偶尔做两次。我所做的是沿着这些方向使用tryCatch。如果您正在进行模拟并且有时某些算法不会收敛并产生警告,这可能会很方便,但您想忽略它,因为您不希望模拟在超级计算机上的100个节点上运行时死亡。

> out <- tryCatch(stop("bla"), error = function(e) e)
> any(class(out) == "error")
[1] TRUE

如果进程不间断(没有错误),则为FALSE。

> out <- tryCatch(1:5, error = function(e) e)
> out
[1] 1 2 3 4 5
> any(class(out) == "error")
[1] FALSE

答案 1 :(得分:4)

您肯定不想使用ifelse,但这可能会显示更有效的路线:

> if( inherits(res <- try( stop() ),  "try-error") ){ FALSE} else{ res}
Error in try(stop()) : 
[1] FALSE

> if( inherits( res <- try( "ppp" ),  "try-error") ){ FALSE} else{ res}
[1] "ppp"

现在我考虑一下:答案只是inherits(tryres, "try-error"),因为它确实返回逻辑。您决定如何处理它取决于您。确实,很多时候测试class(tryres)=="tryerror会成功,但有时会返回多个类,在这种情况下它不会。