Используйте функцию tryCatch для обработки условий в R

В этой статье будет продемонстрировано несколько методов использования функции tryCatch для обработки условий в R.

Используйте tryCatch для обработки ошибок в R

В языке R предусмотрены три типа встроенных условий, которые могут быть выброшены как исключения из кода. Обычно наиболее серьезные из них называются ошибками, которые обычно завершают функцию или выполнение останавливается. Затем появляются предупреждения, которые указывают, возникает ли какая-либо ошибка во время выполнения функции, но она может частично решить проблему. Наконец, у нас есть сообщения, которые используются для информирования пользователя о некоторых незначительных проблемах. У этих трех условий есть соответствующие функции с именами stop, warning и message, которые могут быть вызваны для повышения данного условия.

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