2012-01-13 8 views
21

Ho scritto uno script R che include un ciclo che recupera dati (web) esterni. Il formato dei dati è il più delle volte lo stesso, tuttavia a volte il formato cambia in modo imprevedibile e il mio ciclo si arresta in modo anomalo (interrompe l'esecuzione).Script R - Come continuare l'esecuzione del codice all'errore

C'è un modo per continuare l'esecuzione del codice indipendentemente dall'errore? Sto cercando qualcosa di simile a "On error Resume Next" da VBA.

Grazie in anticipo.

risposta

5

È possibile utilizzare try:

# a has not been defined 
for(i in 1:3) 
{ 
    if(i==2) try(print(a),silent=TRUE) 
    else print(i) 
} 
+0

Grazie per la risposta rapida. Nel caso in cui voglio applicare il "try" nel codice che si espande su più righe qual è la sintassi? –

+0

Vorrei usare una funzione: 'prova ([inserisci una funzione qui])' –

+0

Oppure usa un punto e virgola: 'prova ({a <-1; 2 + 2})' –

21

Usa try o tryCatch.

for(i in something) 
{ 
    res <- try(expression_to_get_data) 
    if(inherits(res, "try-error")) 
    { 
    #error handling code, maybe just skip this iteration using 
    continue 
    } 
    #rest of iteration for case of no error 
} 
+1

Utilizzare tryCatch invece di provare, sintassi più pulita e maggiore controllo a mio parere. – Hansi

+0

@Hansi: ho convenuto che 'tryCatch' è più pulito una volta che lo conosci, anche se ci vuole un po 'più di tempo per capire, quindi ho pensato che' try' sia più appropriato per un programmatore VBA. <*ducks*> –

Problemi correlati