Use a função tryCatch para tratamento de condições em R

Jinku Hu 16 julho 2021
Use a função tryCatch para tratamento de condições em R

Este artigo irá demonstrar vários métodos de uso da função tryCatch para tratamento de condições em R.

Use tryCatch para lidar com condições de erro em R

Três tipos de condições integradas são fornecidos na linguagem R, que podem ser lançados como exceções do código. Convencionalmente, os mais graves são chamados de erros, que geralmente encerram a função ou a execução é interrompida. Em seguida, há avisos, que indicam se algum erro ocorre durante a execução da função, mas é capaz de lidar com o problema parcialmente. Por fim, temos mensagens que são usadas para informar sobre alguns problemas leves ao usuário. Estas três condições têm funções correspondentes denominadas stop, warning e message, que podem ser invocadas para aumentar a condição dada.

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

f1(10)

Resultado:

log( 10 ) = [1] 2.302585

Por exemplo, o código anterior define uma função chamada f1 que recebe um único argumento x e imprime o resultado log(x) com alguma formatação adicional. Observe que se o usuário passar um argumento não numérico para a função f1, ele gerará um erro. Podemos lidar com esse erro registrando o manipulador com a função tryCatch.

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

f1("f")

Resultado:

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

Observe que registrar o manipulador significa que substituímos o código padrão desse erro pelo fornecido pelo usuário. O exemplo a seguir demonstra como a mensagem de erro padrão é substituída pela string de saída customizada. Enquanto isso, a função a seguir se comporta normalmente se a condição de erro não for levantada.

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

f1("f")

Resultado:

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

O uso comum da função tryCatch é implementar um bloco de código que precisa ser executado quando a condição de erro é lançada. Especificamos o bloco de código que é executado quando um erro é gerado nas chaves após a linha error = function(cnd). As linhas a seguir após o bloco de código de erro geralmente são executadas quando o manipulador está ativo.

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

f1("x")

Resultado:

[1] "hello"
[1] 2.302585
Autor: 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 Facebook