当前位置:  开发笔记 > 编程语言 > 正文

while循环里面的tryCatch函数

如何解决《while循环里面的tryCatch函数》经验,为你挑选了1个好方法。

我在置换数据上运行GLMM,对于其中一些我有一个收敛的错误信息.由于这是我的空模型,我只需重新采样这个特定的置换数据.因此我试图处理R的tryCatch函数,但我有一些失败.我有Perm,这是我的数据帧和pglmm的置换数据集,它是置换数据的glmm模型.所以我有以下结构:

pglmm<-NULL
for (i in seq_along(Perm)){
pglmm[[i]]<-summary(lme("My GLMM model"))
}

为了处理错误,我尝试了这个结构

pglmm<-NULL
for (i in seq_along(Perm)){
pglmm[[i]]<- tryCatch(summary(lme()),
error=function(err){
pglmm[[i]]<- summary(lme("My GLMM model on resample data"))
return(pglmm[[i]])
}
}

现在它正在工作,但即使通过重新采样一旦我有错误的数据我可能有收敛问题所以我需要添加一个while循环以重新采样,直到这个收敛错误不再出现.但是我真的不知道在while循环中添加这个位置(内部错误=函数(错误),还是应该在启动for循环时?).

预先感谢您的帮助.



1> Martin Morga..:

预分配和填充,在成功时递增迭代器而不是迭代序列

pglmm <- vector("list", length(Perm))
i <- 1
while (i <= length(Perm)) {
    pglmm[[i]] = tryCatch(summary(lme(...)), error=identity)
    if (!is(pglmm[[i]], "error"))
        i <- i + 1
}

或者避免使用管理内存的需要

pglmm <- replicate(length(Perm), {
    repeat {
        result <- tryCatch(summary(lme(...)), error=identity)
        if (!is(result, "error"))
            break
    }
    result
})

推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有