我通过glm.nb使用包装函数运行数百个数据集.没什么好看的,我只是传递每个列表项llply,然后适合使用glm.nb,将系数写入a data.frame并返回.
毫不奇怪,glm.nb无法收敛某些数据集.而不是让函数咳出一个错误并停止,我宁愿它继续通过其余的数据集并尽可能返回结果.
我的第一次尝试是这样的:
res.model <- function(x)
{
res <- try(invisible(glm.nb(x~y, data=x)))
if(!("try-error" %in% class(res)))
{
return (data.frame(site=unique(x$site_name),species=unique(x$species),coef=res$coefficients[2]))
}
}
Run Code Online (Sandbox Code Playgroud)
有关更通用的方法忽略错误的任何想法,所以我可以使这项工作?
JD *_*ong 10
我有一个运行的nls(),它有同样的挑战.我正在将回归应用于data.frame中的每个组,但是这个逻辑也适用于你(我认为):
dlply(myData, c("group1", "group2"), function(df){
tryCatch(nls(depen ~ exp(a1 + b1 * year) , data=df, start = list(a1 = -1, b1 = 0), na.action=na.omit), error=function(e) NULL)
Run Code Online (Sandbox Code Playgroud)
所以,如果我猜测如何将它应用到你的情况,它将是这样的:
res <- trycatch(glm.nb(x~y, data=x), error=function(e) NULL )
Run Code Online (Sandbox Code Playgroud)
我使用它的方式,我在任何时候回归不收敛时都会抛出NA值.你可能想要做一些不同的事情.
您也可以在plyr中使用failwith功能.如果f是你传递给plyr的函数,你可以改为传递函数
safef = failwith(NA, f)
Run Code Online (Sandbox Code Playgroud)
当然,您可以使用函数失败时所需的任何返回值替换NA.此代码直接从failwith的示例中提取.