Equivalente di & # 8220; lancio & # 8221; in R
-
05-07-2019 - |
Domanda
Come si fa a "lanciare" un errore in R? Ho una funzione che prende un frame di dati e alcuni nomi di colonne e fa cose con loro. Se le colonne non esistono, voglio che la funzione si fermi e tutte le funzioni dipendano da essa.
Ho guardato recuperare
e sfoglia
e traceback
ma, beh, sembravano vicini ma non quello che stavo cercando.
Soluzione
Vedi aiuto (tryCatch)
:
Le condizioni sono segnalate da '
signalCondition
'. Inoltre, il
Le funzioni 'stop
' e 'warning
' hanno stato modificato per accettare anche
argomenti condition.
e successivamente in "Vedi anche":
Le condizioni del segnale'
stop
' e 'warning
' e 'try
' sono essenzialmente versione semplificata di 'tryCatch
'.
quindi probabilmente stop
.
Altri suggerimenti
Esempio semplice:
f <- function(a, b){
if (a == 0){
stop("error message")
}
}
Oltre le funzioni di base menzionate da Dirk:
Il pacchetto R.oo ha un'eccezione aggiuntiva funzionalità di gestione, inclusa una funzione di lancio () che è molto utile. Puoi catturare le eccezioni con le solite funzioni try o trycatch:
> try(throw("Division by zero.")); print("It's ok!");
Error: [2009-10-22 10:24:07] Exception: Division by zero.
[1] "It's ok!"
Puoi leggere ulteriori informazioni qui: http: //www1.maths .lth.se / help / R / R.oo /
In realtà la funzione stopifnot
è molto conveniente per implementare controlli di integrità nel tuo codice. Accetta diverse espressioni logiche e restituisce un errore se uno di essi viene considerato falso.
Esempio: Per verificare se la colonna 'c' esiste nel dataframe 'df':
df <- data.frame(a = numeric(), b = numeric())
stopifnot(!is.null(df$c))
Questo genererà il seguente errore:
Error: !is.null(df$c) is not TRUE
Puoi verificare se la colonna esiste e fare quello che vuoi.
Supponiamo un data.frame
denominato df1
e verificando l'esistenza della colonna col1
:
if(! any(grepl('^col1
o
if(! any(grepl('^col1
Ad esempio
,colnames(df1)))) stop("nonexistent column")
o
<*>
Ad esempio
,colnames(df1)))) return(-1)
Ad esempio
,colnames(df1)))) stop("nonexistent column")o
<*>Ad esempio