在R

时间:2018-07-15 17:22:25

标签: r error-handling try-catch

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(),而是如何使它的语法更简洁。

1 个答案:

答案 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