2010-11-09 11 views
9

Używam kilkuset zestawów danych przez glm.nb przy użyciu funkcji otoki. Nic nadzwyczajnego, po prostu przekazuję każdy element listy przez llply, a następnie dopasowuję za pomocą glm.nb, zapisuję współczynniki do data.frame i zwracam je z powrotem.Jak ignorować błędy i kontynuować przetwarzanie elementów listy?

Nic dziwnego, że glm.nb nie może zbiegać się dla niektórych zestawów danych. Zamiast tego, aby funkcja kasowała błąd i przestała działać, wolałbym, aby był kontynuowany w pozostałych zestawach danych i zwracał wyniki tam, gdzie to możliwe.

Moja pierwsza próba była to:

res.model <- function(x) 
     { 
     res <- try(invisible(glm.nb(x~y, data=x))) 
    if(!("try-error" %in% class(res))) 
     { 
    return (data.frame(site=unique(x$site_name),species=unique(x$species),coef=res$coefficients[2])) 
     } 
} 

Każdy myśli na sposób bardziej ogólny do ignorowania błędów, dzięki czemu można dokonać tej pracy?

+0

Nie wiem zbyt wiele na temat 'plyr', ale czy' failwith() 'jak opisano w pomocy przewodnika wprowadzającego? http://had.co.nz/plyr/plyr-intro-090510.pdf – Chase

+0

Prawdopodobnie powiązane: http://stackoverflow.com/questions/2963729/r-catching-errors-in-nls – nico

Odpowiedz

9

Mam Nls(), które uruchamiam, ma to samo wyzwanie. Ja stosując regresję do każdej grupy w data.frame, ale ta logika powinna pracować dla Ciebie, jak również (chyba):

dlply(myData, c("group1", "group2"), function(df){ 
     tryCatch(nls(depen ~ exp(a1 + b1 * year) , data=df, start = list(a1 = -1, b1 = 0), na.action=na.omit), error=function(e) NULL) 

więc gdybym miał zgadywać, jak zastosować to do sytuacji, byłoby coś takiego:

res <- trycatch(glm.nb(x~y, data=x), error=function(e) NULL) 

The way I to wykorzystać, Rzucam NA wartości każdej chwili regresja nie zbiegają. Możesz chcieć zrobić coś innego.

5

możesz również użyć funkcji failwith w plyr. jeśli f jest funkcją jesteś przejazdem do plyr, można zamiast przekazać funkcję

safef = failwith(NA, f) 

oczywiście można zastąpić NA z cokolwiek powrót wartość trzeba, gdy funkcja zawodzi. ten kod jest usuwany bezpośrednio z przykładów dla niepowodzenia.

Powiązane problemy