2012-07-03 12 views
9

estoy tratando de hacer lo siguiente:¿Cómo puedo determinar si intento devolver un error o no?

try(htmlParse(ip[1], T),

en el que definen una como:

ip[1] = paste('http://en.wikipedia.org/wiki/George_Clooney') 

Quiero comprobar si el htmlParse funcionaba o no. Para muchos nombres en mi lista, no habrá sitios de wikipedia y, por lo tanto, necesito poder verificar y reemplazar ip [1] con NA si las páginas wiki no existen.

¿Puede alguien por favor asesorar cómo puedo hacer eso. Intenté usar el comando geterrmessage(), sin embargo, no estoy seguro de cómo vaciarlo cada vez que cambio el nombre de la celebridad.

Actualmente tengo el siguiente:

if(!isTRUE(as.logical(grep(ip[1],err)))) { 
    ip[1] = NA 
    } 
    else { 

Sin duda es incorrecta, ya que no se ejecuta la instrucción lógica que quiero.

Gracias

Amar

Respuesta

21

Este sencillo ejemplo te ayudará a cabo, pienso:

res <- try(log("a"),silent = TRUE) 
class(res) == "try-error" 
[1] TRUE 

La idea básica es la try retornos (invisiblemente) un objeto de clase "tratar de errores "cuando hay un error. De lo contrario, res contendrá el resultado de la expresión que pase al try. es decir,

res <- try(log(2),silent = TRUE) 
res 
[1] 0.6931472 

pasar algún tiempo leyendo ?try cuidadosamente, incluyendo los ejemplos (que no son tan simples como podrían ser, supongo). Como señala GSee a continuación, una forma más idiomática de comprobar si se produce un error es usar inherits(res,'try-error').

+6

utilizo 'hereda (res, 'try-error')' 'si no se usa tryCatch' – GSee

+0

@GSee Gracias Sí, eso es definitivamente mejor. – joran

0

Yo trataría de descargar todos los nombres (existentes o no) de la wiki y guardarlo en archivos separados.Luego grep la siguiente cadena Wikipedia no tiene un artículo con este nombre exacto y para el no- los existentes obtendría un valor VERDADERO. De esta manera, creo que se asegurará de que el analizador funcione o que el nombre no exista. Además, puede ordenar los archivos descargados en función de su tamaño en caso de que sospeche que algo salió mal. Los corruptos tienen un tamaño más pequeño.

Wikipedia article for a fictitious person Además me gustaría utilizar la función tryCatch el fin de tratar el estado lógico:

x<-3 
tryCatch(x>5,error=print("this is an error")) 
Cuestiones relacionadas