HOWTO · R

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

Este artigo apresenta como usar 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