在R中,是否有一个函数可以在出现错误时返回“FALSE”,否则返回“TRUE”?或者类似这样的东西,还是我需要通过评估类似于
ifelse(class(try(stop())) == "try-error", FALSE, TRUE)
来创建自己的函数?ifelse(class(try(stop())) == "try-error", FALSE, TRUE)
来创建自己的函数?我有时需要这样做。我的方法是使用tryCatch
,就像这样。如果你在进行模拟时遇到一些算法不收敛并发出警告,但你希望忽略它,因为你不想在超级计算机的100个节点上运行时中止你的模拟,那么这种方法会很方便。
> out <- tryCatch(stop("bla"), error = function(e) e)
> any(class(out) == "error")
[1] TRUE
> out <- tryCatch(1:5, error = function(e) e)
> out
[1] 1 2 3 4 5
> any(class(out) == "error")
[1] FALSE
你肯定不想使用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"
会成功,但有时会返回多个类,这种情况下就不会成功。
ifelse(逻辑向量, 当向量为TRUE时替换的值, 当向量为FALSE时替换的值)
相对于if(单一条件==TRUE) {执行某些操作} else {执行其他操作}
- thelatemailany
(如 @Roman 的答案中所做的)? - Abe