【问题标题】:R - Go to next step in loop when errorR - 出错时进入循环的下一步
【发布时间】:2013-06-14 08:37:17
【问题描述】:

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

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

史蒂芬

【问题讨论】:

    标签: r for-loop


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      你为什么不这样做

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

      根据设计,如果条件被评估TRUE,R 只会在下一个换行符上运行代码。始终最好使用花括号 {} 来包装表达式以避免歧义,如果 Pos==0 则可以添加 else 条件来评估其他表达式

      if (sum(Pos) > 0){
        vglm(data ~ 1, betabinomial)
      } else {
        do something else
      }
      

      【讨论】:

      • @juba 谢谢。我想知道这里是否真的需要嵌套的 for 循环。
      • 感谢 Simon 和 juba。但是,我的主要问题是存在 sum(Pos) > 0 并且模型仍然不适合的情况(并且这些不是由 i 确定的,它们是由数据确定的,所以我需要首先尝试拟合模型)。这些是我想忽略的情况。就嵌套的 for 循环而言,它是用于另一个参数的。
      猜你喜欢
      • 1970-01-01
      • 2011-11-05
      • 1970-01-01
      • 2013-06-13
      • 2018-01-17
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 2014-10-10
      相关资源
      最近更新 更多