R中有一个名为tryCatch()
的函数可以从错误中恢复。我只看过将错误处理步骤编写为函数。例如,添加error=function(e){0}
将在错误时返回零值。有没有更简单的方法来定义tryCatch()
而不必将错误编写为函数?如果没有,那为什么呢?
我希望使用这样的语法和结果:
x <- tryCatch(sqrt("a"), 0)
#> x
#> [1] 0
您可以编写自己的tryCatch()
包装函数(下面的示例),但是我想知道现有软件包中是否已经存在另一个函数,或者tryCatch()
文档中是否缺少某些使该功能的东西可能。
写为包装函数的解决方案:
iferror <- function(expr, error_expr){
tryCatch(expr, error=function(e){error_expr})
}
x <- iferror(sqrt("a"), 0)
#> x
#> [1] 0
注意:这不是 问题,如何使用tryCatch()
,而是如何使它的语法更简洁。
答案 0 :(得分:0)
一种可能的解决方案是使用 testit 包中的has_error()
函数。尽管CRAN版本不允许控制错误消息的抑制。
示例:
ifelse(testit::has_error(sqrt("a")), 0)
#> Error in sqrt("a") : non-numeric argument to mathematical function
#> [1] 0