Come scrivere la tua prima funzione trycatch() in r
È possibile utilizzare una funzione tryCatch() in R per restituire il valore di un’espressione o produrre un messaggio personalizzato se viene rilevato un avviso o un errore.
Questa funzione utilizza la seguente sintassi di base:
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) } ) }
Gli esempi seguenti mostrano come utilizzare nella pratica una funzione tryCatch() .
Esempio: creare una funzione tryCatch() in R
Supponiamo di creare la seguente funzione tryCatch() che tenta di prendere il logaritmo di un valore e quindi di dividerlo per un secondo valore.
Se si verifica un errore, visualizzeremo il messaggio “Si è verificato un errore” e quindi stamperemo l’errore su R.
Se si verifica un avviso, genereremo il messaggio “Si è verificato un avviso”, stamperemo l’avviso su R e quindi restituiremo un valore NA.
Se non si verificano errori o avvisi, restituiremo semplicemente il risultato della funzione.
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)
}
)
}
Eseguiamo questa funzione in diversi scenari.
Scenario 1: non si verificano errori o avvisi.
Il codice seguente illustra come utilizzare la funzione in uno scenario in cui non si verificano errori o avvisi.
#run function
log_and_divide(10, 2)
[1] 1.151293
Poiché non si verificano errori o avvisi, la funzione restituisce semplicemente il risultato dell’espressione, che risulta essere 1.151293 .
Scenario 2: si verifica un errore.
Il codice seguente mostra come utilizzare la funzione in uno scenario in cui si verifica un errore:
#run function
log_and_divide(10)
An Error Occurred
<simpleError in doTryCatch(return(expr), name, parentenv, handler):
argument "y" is missing, with no default>
Dato che abbiamo fornito un solo argomento alla funzione, riceviamo il messaggio che dice ” Si è verificato un errore ” e vediamo anche l’errore esatto prodotto da R.
Scenario 3: si verifica un avviso.
Il codice seguente mostra come utilizzare la funzione in uno scenario in cui si verifica un avviso:
#run function
log_and_divide(-10, 2)
A Warning Occurred
<simpleWarning in log(x): NaNs produced>
[1] NA
Poiché abbiamo fornito un valore negativo per il primo argomento, R non è in grado di calcolare il logaritmo di un valore negativo, quindi riceviamo il messaggio che dice ” Si è verificato un avviso “, vediamo l’esatto avviso prodotto da R e la funzione restituisce NA come ha valore negativo. risultato.
Risorse addizionali
I seguenti tutorial spiegano come eseguire altre operazioni comuni in R:
Come creare un ciclo For nidificato in R
Come aggiungere valori a un vettore utilizzando un loop in R
Come restituire il valore di una funzione in R