Como escrever sua primeira função trycatch() em r


Você pode usar uma função tryCatch() em R para retornar o valor de uma expressão ou produzir uma mensagem personalizada se um aviso ou erro for encontrado.

Esta função usa a seguinte sintaxe básica:

 my_function <- function (x, y){
    tryCatch (
        #try to do this
        {
        #some expression
        },
        #if an error occurs, tell me the error
        error= function (e) {
            message(' An Error Occurred ')
            print(e)
        },
        #if a warning occurs, tell me the warning
        warning= function (w) {
            message(' A Warning Occurred ')
            print(w)
            return (NA)
        }
    )
}

Os exemplos a seguir mostram como usar uma função tryCatch() na prática.

Exemplo: Crie uma função tryCatch() em R

Digamos que criamos a seguinte função tryCatch() que tenta pegar o log de um valor e depois dividi-lo por um segundo valor.

Se ocorrer um erro, emitiremos a mensagem “Ocorreu um erro” e depois imprimiremos o erro em R.

Se ocorrer um aviso, emitiremos a mensagem “Ocorreu um aviso”, imprimiremos o aviso em R e retornaremos um valor NA.

Se nenhum erro ou aviso ocorrer, simplesmente retornaremos o resultado da função.

 log_and_divide <- function (x, y){
    tryCatch (
        {
        result = log(x) / y
        return (result)
        },
        error= function (e) {
            message(' An Error Occurred ')
            print(e)
        },
        warning= function (w) {
            message(' A Warning Occurred ')
            print(w)
            return (NA)
        }
    )
}

Vamos executar esta função em diferentes cenários.

Cenário 1: Não ocorrem erros ou avisos.

O código a seguir mostra como usar a função em um cenário em que não ocorrem erros ou avisos.

 #run function
log_and_divide(10, 2)

[1] 1.151293

Como não ocorrem erros ou avisos, a função simplesmente retorna o resultado da expressão, que é 1.151293 .

Cenário 2: Ocorre um erro.

O código a seguir mostra como usar a função em um cenário em que ocorre um erro:

 #run function
log_and_divide(10)

An Error Occurred
<simpleError in doTryCatch(return(expr), name, parentenv, handler):
  argument "y" is missing, with no default>

Como fornecemos apenas um argumento para a função, recebemos a mensagem que diz “ Ocorreu um erro ” e também vemos o erro exato produzido por R.

Cenário 3: Ocorre um aviso.

O código a seguir mostra como usar a função em um cenário onde ocorre um aviso:

 #run function
log_and_divide(-10, 2)

A Warning Occurred
<simpleWarning in log(x): NaNs produced>
[1] NA

Como fornecemos um valor negativo para o primeiro argumento, R não consegue calcular o log de um valor negativo, então recebemos a mensagem dizendo ” Ocorreu um aviso “, vemos o aviso exato produzido por R e a função retorna NA como tem valor negativo. resultado.

Recursos adicionais

Os tutoriais a seguir explicam como realizar outras operações comuns em R:

Como criar um loop For aninhado em R
Como adicionar valores a um vetor usando um loop em R
Como retornar o valor de uma função em R

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *