Czy ktoś ma przykłady / tutoriale obsługi wyjątków w R? Oficjalna dokumentacja jest bardzo zwięzła.
r
exception-handling
gappy
źródło
źródło
Odpowiedzi:
Oprócz odpowiedzi Shane'a wskazującej na inne dyskusje StackOverflow, możesz wypróbować funkcję wyszukiwania kodu. Ta pierwotna odpowiedź wskazała na wyszukiwarkę Google Code Search, która została wycofana, ale możesz spróbować
Tak dla przypomnienia, jest też,
try
aletryCatch
może być lepsze. Próbowałem szybko policzyć w Google Code Search, ale próbowałem uzyskać zbyt wiele fałszywych alarmów dla samego czasownika - ale wydaje się, żetryCatch
jest on częściej używany.źródło
Zasadniczo chcesz użyć tej
tryCatch()
funkcji. Więcej informacji znajdziesz w pomocy („tryCatch”).Oto trywialny przykład (pamiętaj, że z błędem możesz zrobić, co chcesz):
Spójrz na te powiązane pytania:
źródło
Pomógł mi ten wynik z powiązanej wyszukiwarki Google: http://biocodenv.com/wordpress/?p=15 .
źródło
Ta funkcja
trycatch()
jest dość prosta i jest na jej temat wiele dobrych tutoriali. Doskonałe wyjaśnienie obsługi błędów w R można znaleźć w książce Hadleya Wickhama Advanced-R , a poniżej znajduje się bardzo podstawowe wprowadzenie dowithCallingHandlers()
iwithRestarts()
w jak najmniejszej liczbie słów:Powiedzmy, że programista niskiego poziomu pisze funkcję obliczającą wartość bezwzględną. Nie jest pewien, jak to obliczyć, ale wie, jak skonstruować błąd i pilnie przekazuje swoją naiwność:
Programista średniego poziomu pisze również funkcję obliczającą wartość bezwzględną, wykorzystując żałośnie niekompletną
low_level_ABS
funkcję. Wie, że kod niskiego poziomu generujenegative_value
błąd, gdy wartośćx
jest ujemna, i sugeruje rozwiązanie problemu, ustanawiając sposób,restart
który pozwala użytkownikommid_level_ABS
kontrolować sposób, w jakimid_level_ABS
odzyskuje (lub nie) ponegative_value
błędzie.Wreszcie, programista wysoki poziom wykorzystuje
mid_level_ABS
funkcję do obliczania wartości bezwzględnej, a ustanawia obsługi warunek, który mówimid_level_ABS
, aby odzyskać odnegative_value
błędu za pomocą obsługi restartu.Chodzi o to, że używając
withRestarts()
iwithCallingHandlers()
, funkcjahigh_level_ABS
była w stanie powiedzieć,mid_level_ABS
jak naprawić błędy wywołane przezlow_level_ABS
błąd bez zatrzymywania wykonywaniamid_level_ABS
, czego nie można zrobićtryCatch()
:W praktyce
low_level_ABS
reprezentuje funkcję, któramid_level_ABS
wywołuje dużo (może nawet miliony razy), dla której poprawna metoda obsługi błędów może się różnić w zależności od sytuacji, a wybór sposobu obsługi określonych błędów pozostawia się funkcjom wyższego poziomu (high_level_ABS
).źródło
Funkcja restartu jest bardzo ważna w R dziedziczonej z Lispa. Jest to przydatne, jeśli chcesz wywołać jakąś funkcję w treści pętli i chcesz, aby program kontynuował działanie, jeśli wywołanie funkcji się zwinie. Wypróbuj ten kod:
źródło