Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在R中的for循环中使用tryCatch_R_For Loop_Try Catch - Fatal编程技术网

如何在R中的for循环中使用tryCatch

如何在R中的for循环中使用tryCatch,r,for-loop,try-catch,R,For Loop,Try Catch,我试图估计R中for循环中的许多模型。我首先为变量'Date'定义了一组可能的值,并将这些值存储在'Dates'中。然后,对于每个模型,我根据这些“日期”值定义一个通用数据集的子集 最后,我的目标是将所有这些模型的一些系数存储在两个矩阵中:effRain和efffwindchill 问题是:在某些情况下,由于错误,glmer模型无法估计。在这些情况下,我希望循环跳过并继续到循环中的下一步。然而,我在R方面不是很有经验。我发现我可能需要使用tryCatch,但是我应该如何将其融入我的代码中呢?我一

我试图估计R中for循环中的许多模型。我首先为变量'Date'定义了一组可能的值,并将这些值存储在'Dates'中。然后,对于每个模型,我根据这些“日期”值定义一个通用数据集的子集

最后,我的目标是将所有这些模型的一些系数存储在两个矩阵中:effRain和efffwindchill

问题是:在某些情况下,由于错误,
glmer
模型无法估计。在这些情况下,我希望循环跳过并继续到循环中的下一步。然而,我在R方面不是很有经验。我发现我可能需要使用
tryCatch
,但是我应该如何将其融入我的代码中呢?我一直在努力,但我就是想不出来

这是我到目前为止的代码:

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]
}

Dates我建议不要在此处使用
用于
,并使用
lappy
避免
用于
的副作用和预分配内存

代码应该是这样的

 lapply(Dates,estimat_coef)
模型代码封装在下面这样的函数中。我只是将您的代码放在(
tryCatch
error
)中

estimat_coef
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
  }