R - 出错时转到循环的下一步

时间:2013-06-14 08:37:17

标签: r for-loop

我在R中运行模拟,在 for 循环中运行。在循环的每个步骤中,我尝试使用 VGAM 包的 vglm 函数来拟合beta二项分布:

vglm(data ~ 1, betabinomial)

然而,对于我生成的一些数据,beta二项模型不适合,函数崩溃。因为它崩溃了,R退出循环并停止。我想简单地转到循环中的下一步。我知道函数 tryCatch 但在我的情况下未能使用它。 目前,我的代码如下(注意 for 循环嵌套在另一个 for 循环中):

for (i in 1:nsimu) {
    ## Some code to generate Pos and Neg
    data <- cbind(Pos,Neg)
    if (sum(Pos)==0) {
       ##Go to next step
    } 
    else { 
       vglm(data ~ 1, betabinomial)
    } 
} 

非常感谢您的任何帮助或建议。

斯特凡

2 个答案:

答案 0 :(得分:6)

您可以使用next跳过for循环中的步骤:

R> for (i in 1:5) { if (i==2) next(); print(i)}
[1] 1
[1] 3
[1] 4
[1] 5

答案 1 :(得分:3)

你为什么不这样做

if (sum(Pos) > 0) 
  vglm(data ~ 1, betabinomial)

根据设计,如果条件被评估TRUE,则R仅在下一个换行符上运行代码。总是最好使用花括号{}来包装表达式以避免歧义,并且如果else

,您可以添加Pos==0条件来评估其他表达式
if (sum(Pos) > 0){
  vglm(data ~ 1, betabinomial)
} else {
  do something else
}