在 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