7

我想使用try()ortryCatch()或这样的函数来检测我的模型中是否存在名为“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"))

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

谢谢!

4

1 回答 1

10

使用tryortryCatch并不困难。要了解有关错误处理的更多信息,我建议阅读 Hadley Wickham 即将出版的新书一章Advanced R Programming: E​​xceptions and Debugging。它真是太棒了!

对于您的具体示例,您可以使用下面这两个函数之一: usingtry允许您在发生错误的情况下继续执行函数调用(您可以稍后注意),同时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))

}

但是,如果您知道只有第一个模型会失败,那当然可以。可能还有其他情况,所以请三思而后行。祝你好运!

于 2014-07-17T10:24:23.143 回答