2013-02-03 17 views
5

Chcę uzyskać NA, gdy funkcja zwraca błąd, a nie zatrzymanie kodu.Złap błąd, produkując NA

Używam obecnie

try.test<-try(results<-lm(log(0)~1)) 
if(class(try.test)=="try-error"){results<-NA} 

Próbowałem też bawić się tryCatch.

Chciałbym znaleźć pojedyncze rozwiązanie funkcji/linii.

Odpowiedz

12

Spróbuj

result <- tryCatch(lm(log(0)~1), error=function(err) NA) 

Ale to łapie wszystkie błędy, nie tylko tych z dziennika (0).

4

Mniej niż elegancki, ale równie krótki sposób na rozwiązanie problemu.

results <- NA 
try(results<-lm(log(0)~1), silent = TRUE) 

Jeśli szukasz eleganckiego sposobu radzenia sobie z błędami, polecam zapoznanie się z koncepcją monady; używanie tych struktur zmniejsza ilość "if (! na (x)) ...." w twoich skryptach.