Я выполняю несколько моделей по подгруппам, используя dlply
library(dplyr)
library(geepack)
data("mtcars")
mtcars <- mtcars[,c("mpg", "cyl", "hp")]
models = plyr::dlply(mtcars, "cyl", function(df) lm(mpg ~ hp,data=df))
lapply(models, summary)
Существует сценарий, когда некоторые модели не сходятся в результате отказа. Чтобы подчеркнуть свою точку зрения, я модифицирую приведенный выше код так, чтобы он преднамеренно не работал.
mtcars_test <- mtcars[,c("mpg", "cyl", "hp")]
mtcars_test <- mtcars_test %>% mutate(mpg = replace(mpg, which(cyl == 6 & mpg < 20), "9as34"))
models = plyr::dlply(mtcars_test, "cyl", function(df) geeglm(mpg ~ hp,data=df))
lapply(models, summary)
Как я могу заставить dlply хранить сообщение «Не удалось совместить» вместо того, чтобы сбой на полпути?
Ожидая таких результатов.
> models
$`4`
Call:
lm(formula = mpg ~ hp, data = df)
Coefficients:
(Intercept) hp
35.9830 -0.1128
$`6`
"Failed to converge"
$`8`
Call:
lm(formula = mpg ~ hp, data = df)
Coefficients:
(Intercept) hp
18.08007 -0.01424
Здесь при условии, что модель не может сходиться на подмножестве, цилиндр = 6 Спасибо ?
Мы можем использовать tryCatch
models <- plyr::dlply(mtcars_test, "cyl", function(df)
tryCatch(geeglm(mpg ~ hp,data=df), error = function(e) "Failed to converge"))