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.

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top