Usa la funzione tryCatch per la gestione delle condizioni in R

Jinku Hu 16 luglio 2021
Usa la funzione tryCatch per la gestione delle condizioni in R

Questo articolo dimostrerà diversi metodi di utilizzo della funzione tryCatch per la gestione delle condizioni in R.

Usa tryCatch per gestire le condizioni di errore in R

Nel linguaggio R sono forniti tre tipi di condizioni predefinite, che possono essere lanciate come eccezioni dal codice. Convenzionalmente, quelli più gravi sono chiamati errori, che di solito terminano la funzione o l’esecuzione viene interrotta. Quindi, ci sono avvisi, che indicano se si verifica un errore durante l’esecuzione della funzione, ma è in grado di gestire parzialmente il problema. Infine, abbiamo messaggi che vengono utilizzati per informare l’utente di alcuni problemi lievi. Queste tre condizioni hanno funzioni corrispondenti denominate stop, warning e message, che possono essere invocate per sollevare la data condizione.

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

f1(10)

Produzione:

log( 10 ) = [1] 2.302585

Ad esempio, il codice precedente definisce una funzione denominata f1 che accetta un singolo argomento x e stampa il risultato log(x) con una formattazione aggiuntiva. Si noti che se l’utente passa un argomento non numerico alla funzione f1, genera un errore. Possiamo gestire questo errore registrando il gestore con la funzione tryCatch.

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

f1("f")

Produzione:

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

Nota che la registrazione del gestore significa che sovrascriviamo il codice predefinito per questo errore con quello fornito dall’utente. L’esempio seguente mostra come il messaggio di errore predefinito viene sostituito con la stringa di output personalizzata. Nel frattempo, la seguente funzione si comporta normalmente se la condizione di errore non viene sollevata.

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

f1("f")

Produzione:

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

L’uso comune della funzione tryCatch consiste nell’implementare un blocco di codice che deve essere eseguito quando viene generata la condizione di errore. Specifichiamo il blocco di codice che viene eseguito quando viene sollevato un errore tra parentesi graffe dopo la riga error = function(cnd). Le seguenti righe dopo il blocco del codice di errore vengono in genere eseguite quando il gestore è attivo.

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

f1("x")

Produzione:

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