r - 在R中编写tryCatch的简单版本

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

最佳答案

一种可能的解决方案是使用 testit 软件包中的has_error()函数。尽管CRAN版本不允许控制错误消息的抑制。

示例:

ifelse(testit::has_error(sqrt("a")), 0)
#> Error in sqrt("a") : non-numeric argument to mathematical function
#> [1] 0

关于r - 在R中编写tryCatch的简单版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51350517/

相关文章:

r - plm问题,重复的时间ID错误

php - 尝试/捕获不适用于 Laravel 5.4

java - 如何从 Eclipse 中的线程中提取堆栈跟踪?

r - 在ggplot2中向图例添加线型

r - 将包含不规则项目的 1 级列表转换为数据框

javascript - Uncaught SyntaxError : Unexpected identifier

sql-server - SQL Server死锁修复: Force join order,或自动重试?

python - 如何使用 python lambdas 捕获异常

r - 构建R包tarball,而不必在tarball中泄露您的用户名

r - 使用 ggplot2 出现意外的 Walker 别名表输出