在 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