如果给出错误,R中是否有一个返回“FALSE”的函数,否则返回“TRUE”?或者沿着这些方向做某事,或者我是否需要通过评估像ifelse(class(try(stop())) == "try-error", FALSE, TRUE)
这样的东西来创建自己的东西?
答案 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
会成功,但有时会返回多个类,在这种情况下它不会。