2012-07-03 8 views
9

Próbuję wykonać następujące czynności:Jak ustalić, czy próba zwróciła błąd, czy nie?

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

gdzie zdefiniować jako:

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

Chcę sprawdzić, czy htmlParse pracował, czy nie. Dla wielu nazwisk na mojej liście nie będzie stron wikipedia i dlatego muszę mieć możliwość sprawdzenia i zamiany ip [1] na NA, jeśli strony wiki nie istnieją.

Czy ktoś może doradzić, w jaki sposób mogę to zrobić. Próbowałem użyć polecenia geterrmessage(), jednak nie jestem pewien, jak za każdym razem zmieniać nazwę celownika.

Obecnie mam następujące:

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

To jest zdecydowanie błędne, gdyż nie jest uruchomiony logiczne stwierdzenie chcę.

Dzięki

Amar

Odpowiedz

21

Ten prosty przykład powinien pomóc, myślę:

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

Podstawową ideą jest try powraca (niewidoczny) obiekt klasy „try-błąd "gdy wystąpi błąd. W przeciwnym razie, res będzie zawierał wynik wyrażenia, które przekazujesz do try. tj

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

dokładnie przeczytać ?try dokładnie, w tym przykłady (które nie są tak proste, jak mogą one być, chyba). Jak zauważa GSee poniżej, bardziej idiomatycznym sposobem sprawdzenia, czy błąd został zgłoszony, jest użycie inherits(res,'try-error').

+6

używam 'dziedziczy (RES 'try-błąd')' 'jeśli nie używając tryCatch' – GSee

+0

@GSee Thanks tak, to zdecydowanie lepsze. – joran

0

Chciałbym pobrać wszystkie nazwy (istniejące lub nie) z wiki i zapisać je w oddzielnych plikach. Następnie pobrałbym następujący ciąg Wikipedia nie ma artykułu o tej dokładnej nazwie, a dla nie- istniejące, otrzymam PRAWDA wartość. W ten sposób uważam, że upewnisz się, czy parser działał, czy nazwa nie istniała. Dodatkowo możesz posortować pobrane pliki na podstawie ich rozmiaru, na wypadek podejrzeń, że coś poszło nie tak. Zepsute mają mniejszy rozmiar.

Wikipedia article for a fictitious person Dodatkowo użyłbym tryCatch funkcji w celu leczenia stanu logicznego:

x<-3 
tryCatch(x>5,error=print("this is an error")) 
Powiązane problemy