如何在R中使用tryCatch

use*_*463 6 r try-catch lmer

我想使用try()或者tryCatch()像这样的函数来检测我的模型中是否存在名为"fit1"的错误.如果模型没问题,我想使用"fit1",否则我想使用"fit2"

fit1<-glmer(stat ~ dataint + DBH + DBH2 + (1|site_plot), family=binomial(link="logit"))

fit2<-glm (stat ~ dataint + DBH + DBH2, family=binomial(link="logit"))
Run Code Online (Sandbox Code Playgroud)

你知道怎么做吗?我没有添加任何数据,因为我的问题可能很容易解决,但如果需要,我可以上传它们.

谢谢!

Sar*_*nas 9

使用trytryCatch不难.要阅读有关错误处理的更多信息,我建议阅读Hadley Wickham即将出版的新书" Advanced R Programming:Exceptions and Debugging"一章.它真棒!

对于您的具体示例,您可以使用以下两个函数之一:using try允许您继续执行函数调用,即使发生错误(您可以在以后注意到),同时tryCatch您可以提前指定错误处理:

select<-function(data, formula1, formula2){

  fit1 <- try(lm(formula1, data))
  fit2 <- lm(formula2, data)

  if(is(fit1, "try-error")) fit2 else fit1
}

select1<-function(data, formula1, formula2){

  tryCatch(lm(formula1, data), error = function(e) lm(formula2, data))

}
Run Code Online (Sandbox Code Playgroud)

但是,如果您知道只有第一个模型可能会失败,那当然有效.可能还有其他场景,所以请考虑一下.祝好运!