【问题标题】:How to use tryCatch in a for-loop in R如何在 R 的 for 循环中使用 tryCatch
【发布时间】:2014-02-06 15:45:36
【问题描述】:

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

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

问题是:在某些情况下,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]
}

【问题讨论】:

    标签: r for-loop try-catch


    【解决方案1】:

    我建议不要在这里使用for 并使用lapply 以避免for 的副作用和预分配结构导致内存。

    代码应该是这样的

     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
      }
    

    【讨论】:

      猜你喜欢
      • 2015-06-01
      • 1970-01-01
      • 2020-03-23
      • 2018-10-02
      • 2015-08-20
      • 2015-12-28
      • 1970-01-01
      • 2014-11-01
      相关资源
      最近更新 更多