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