3

如果给出错误,R中是否有一个函数返回“FALSE”,否则返回“TRUE”?或者类似的东西,还是我需要通过评估类似的东西来创建自己的ifelse(class(try(stop())) == "try-error", FALSE, TRUE)

4

2 回答 2

7

我不得不偶尔或两次这样做。我所做的就是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
于 2013-01-23T00:06:59.993 回答
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会成功,但有时会返回不止一个类,在这种情况下不会。

于 2013-01-22T23:15:01.350 回答