将模型与dplyr和broom进行比较::一览:如果产生错误,如何继续?

时间:2016-08-19 17:12:20

标签: r error-handling dplyr broom

我想使用R中的lme4包将数据集中的每个变量作为单变量glmer模型运行。我想使用dplyr / tidyr包准备数据,并使用扫帚包组织每个模型的结果(即做(glance(glmer ......)。我非常感谢那些陷入该框架的帮助。我在R中并不是那么好,但能够产生一个抛出错误并具有相同结构的数据集作为我使用的数据:

library(lme4)
library(dplyr)
library(tidyr)
library(broom)

Bird<-c(rep(c(0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0),10))
Stop<-c(rep(seq(1,10), 20))
Count<-c(rep(c(rep(c(1,2), each=10)), each=10))
Route<-c(rep(seq(1,10), each=20))
X1<-rnorm(200, 50, 10)
X2<-rnorm(200, 10, 1)
X3<-c(rep(c(0),200))#trouble maker variable

Data<-data.frame(cbind(Bird, Stop, Count, Route, X1, X2, X3))

Data%>%
  gather(Variable, Value, 5:7)%>%
  group_by(Variable)%>%
  do(glance(glmer(Bird~Value+Stop+(1+Stop|Route/Count), data=.,     family=binomial)))

最后一个变量产生错误,因此没有输出。我想要的是在输出中产生NA值,或者只是跳过该变量。我尝试过使用&#39;尝试&#39;吹过麻烦制造者变量:

do(try(glance(glmer(Bird~Value+Stop+(1+Stop|Route/Count), data=.,       family=binomial))))

它确实如此,但仍然没有产生输出,因为它无法强制尝试错误&#39;到data.frame。不幸的是,没有tryharder功能。我尝试了一些对我有意义但对计算机没有意义的陈述。我确定我做得不对,但是如果我使用的话:

try(glance(glmer(Bird~Value+Stop+(1+Stop|Route/Count), data=., family=binomial)))->mod
if(is.data.frame(mod)){do(mod)}

我得到下标超出界限错误。非常感谢您提供的任何输入!

1 个答案:

答案 0 :(得分:1)

在致电tryCatch之前使用glance

zz = Data %>%
  gather(Variable, Value, 5:7) %>%
  group_by(Variable) %>%
  do(aa = tryCatch(glmer(Bird~Value+Stop+(1+Stop|Route/Count), data=., 
                  family=binomial), error = function(e) data.frame(NA))) 


zz %>% 
  glance(aa)