在 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
Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn