2012-01-13 37 views
21

He escrito un script R que incluye un bucle que recupera datos externos (web). El formato de los datos es la mayoría de las veces el mismo, sin embargo, a veces el formato cambia de forma impredecible y mi ciclo se bloquea (deja de ejecutarse).R Script - Cómo continuar la ejecución de código en el error

¿Hay alguna forma de continuar la ejecución del código independientemente del error? Estoy buscando algo similar a "On error Resume Next" de VBA.

Gracias de antemano.

Respuesta

5

Puede utilizar try:

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

Gracias por la respuesta rápida. En caso de que quiera aplicar la "prueba" en el código que se expande a varias líneas, ¿cuál es la sintaxis? –

+0

Usaría una función: 'try ([inserte una función aquí])' –

+0

O use un punto y coma: 'try ({a <-1; 2 + 2})' –

21

Uso 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

Use tryCatch en lugar de intentar, una sintaxis más limpia y más control en mi opinión. – Hansi

+0

@Hansi: acordé que 'tryCatch' es más limpio una vez que lo sabes, aunque lleva un poco más de tiempo entenderlo, así que pensé que 'try' es más apropiado para un programador de VBA. <*ducks*> –

Cuestiones relacionadas