gpt4 book ai didi

r - tryCatch 函数中的 while 循环

转载 作者:行者123 更新时间:2023-12-04 23:16:03 26 4
gpt4 key购买 nike

我在排列数据上运行 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 循环(在 error=function(err) 内,还是应该在启动 for 循环时添加?)。

预先感谢您的帮助。

最佳答案

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

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
})

关于r - tryCatch 函数中的 while 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41791003/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com