2014-02-06 4 views
1

R의 for-loop에서 많은 모델을 평가하려고합니다. 먼저 'Date'변수에 사용할 수있는 값 집합을 정의하고이를 저장했습니다 '날짜'에 그런 다음 각 모델에 대해 '날짜'값에 따라 일반 데이터 집합의 하위 집합을 정의합니다.for 루프에서 tryCatch를 사용하는 방법 R

결국 내 목표는이 모든 모델의 계수를 effRain과 effWindchill의 두 행렬에 저장하는 것입니다.

문제는 : 어떤 경우에는 오류로 인해 glmer 모델을 추정 할 수 없습니다. 이 경우 루프를 건너 뛰고 루프의 다음 단계를 계속 진행합니다. 그러나 저는 R에 익숙하지 않습니다. 아마 tryCatch을 사용할 필요가 있다는 것을 알았지 만 이것을 어떻게 내 코드에 맞춰야합니까? 나는 노력하고 노력했지만, 나는 그것을 알아낼 수 없다.

이 내 코드는 지금까지 최대입니다 : 내가 for 부작용 및 방지하기 위해 여기 for을 사용하고 lapply를 사용하지 않는 것이 좋습니다

Dates <- c(19710428,19721129,19740529,19770525,19780531,19810526,19820602,19820908, 
19840614,19860319,19860521,19890615,19890906,19900321,19940302,19940503, 
19940609,19980304,19980506,19990303,19990610,20020206,20020515,20030122, 
20030311,20040610,20060307,20061122,20070307,20090604,20100303,20100609, 
20110302,20120912) 

effRain <- matrix(nrow=34,ncol=2,0) 
effWindchill <- matrix(nrow=34,ncol=2,0) 

for(i in 1:34){ 
hulpdata <- hulpdata <- subset(banaan,Date==Dates[i]) 
attach(hulpdata) 
SP2 <- SP/100 
model1 <- glmer (cbind(opkomst, nnietgestemd) ~ 
     (1|gemnr)+ Windchill + Rain + Windspeed + SP2 + lag_popkomst + NB + OL + loginw 
     , family=binomial(link=logit)) 
effRain[i] <- coef(summary(model1))[3] 
effWindchill[i] <- coef(summary(model1))[2] 
} 

답변

1

구조 결과 메모리를 미리 할당하는.

코드는해야 모델 코드가 아래에 이와 같은 함수 내에서 캡슐화이

lapply(Dates,estimat_coef) 

같은. 방금 코드를 넣으십시오 (tryCatch, error).

estimat_coef <- 
    function(x){ 
    res = tryCatch({ 
     hulpdata <- hulpdata <- subset(banaan,Date==x) 
     attach(hulpdata) 
     SP2 <- SP/100 
     model1 <- glmer (cbind(opkomst, nnietgestemd) ~ 
         (1|gemnr)+ Windchill + Rain + Windspeed + SP2 + 
         lag_popkomst + NB + OL + loginw 
         , family=binomial(link=logit)) 
     list(effRain =coef(summary(model1))[3], 
      effWindchill = coef(summary(model1))[2]) 
    },error=function(e)list(effRain=NA,effWindchill=NA)) 
    res 
    } 
관련 문제