2016-08-19 48 views
0

我想在一個數據集作爲使用lme4包在R.單變量模型glmer我想與dplyr/tidyr包準備數據,並從組織與掃帚包的每個模型的結果運行的每個變量(即do(glance(glmer ...)。我非常感謝這個框架中的幫助,我在R中並不是那麼棒,但能夠生成一個引發錯誤並與數據具有相同結構的數據集我使用的是:將模型與dplyr和掃帚進行比較::一瞥:如果產生錯誤,該如何繼續?

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值,如果發生這種情況,或者只是跳過可變我的一切。嘗試使用'嘗試'吹過麻煩製造者變量:

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

它雖然它,但仍不產生輸出,因爲它不能強制'數據幀'的'嘗試錯誤'。不幸的是,沒有tryharder功能。我試過一些對我有意義的陳述,但不是電腦。我確信我沒有做正確的,但如果例如我使用:

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

我得到下標超出界限的錯誤。非常感謝您提供的任何輸入!

回答

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) 
+0

難以置信!非常感謝! –

相關問題