在 R 中使用 tryCatch 函数进行条件处理

Jinku Hu 2021年7月16日
在 R 中使用 tryCatch 函数进行条件处理

本文将演示在 R 中使用 tryCatch 函数进行条件处理的多种方法。

使用 tryCatch 处理 R 中的错​​误条件

R 语言提供了三种内置条件,可以作为异常从代码中抛出。通常,最严重的错误称为错误,通常会终止函数或停止执行。然后,有警告,表明在函数执行过程中是否发生了一些错误,但它能够部分处理问题。最后,我们有一些消息用于向用户通知一些轻微的问题。这三个条件具有相应的名为 stopwarningmessage 的函数,可以调用这些函数来引发给定的条件。

f1 <- function(x) {
  cat("log(", x, ") = ", (log(x)))
}

f1(10)

输出:

log( 10 ) = [1] 2.302585

例如,前面的代码定义了一个名为 f1 的函数,它接受一个参数 x 并使用一些额外的格式打印 log(x) 结果。请注意,如果用户将非数字参数传递给 f1 函数,则会引发错误。我们可以通过使用 tryCatch 函数注册处理程序来处理此错误。

f1 <- function(x) {
  cat("log(", x, ") = ", (log(x)))
}

f1("f")

输出:

Error in log(x) : non-numeric argument to mathematical function

请注意,注册处理程序意味着我们使用用户提供的代码覆盖此错误的默认代码。以下示例演示如何使用自定义输出字符串替换默认错误消息。同时,如果未引发错误条件,以下函数将正常运行。

f1 <- function(x) {
  tryCatch(
    error = function(cnd) "The custom output that we need to print",
    cat("log(", x, ") = ", (log(x)))
  )
}

f1("f")

输出:

[1] "The custom output that we need to print"

tryCatch 函数的常见用法是实现一个在抛出错误条件时需要执行的代码块。我们在 error = function(cnd) 行之后的花括号中指定了当出现错误时执行的代码块。错误代码块后面的以下几行通常在处理程序处于活动状态时运行。

f1 <- function(x) {
  tryCatch(
    error = function(cnd) {
      print("hello")
      log(10)
    },
    cat("log(", x, ") = ", (log(x)))
  )
}

f1("x")

输出:

[1] "hello"
[1] 2.302585
作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 创始人。Jinku 在机器人和汽车行业工作了8多年。他在自动测试、远程测试及从耐久性测试中创建报告时磨练了自己的编程技能。他拥有电气/电子工程背景,但他也扩展了自己的兴趣到嵌入式电子、嵌入式编程以及前端和后端编程。

LinkedIn Facebook