【问题标题】:Why is break() not working in this loop? (but stop is)为什么 break() 在这个循环中不起作用? (但停止是)
【发布时间】:2017-01-19 12:29:37
【问题描述】:

我正在尝试构建一个矩阵模型,该模型在调用某些条件时结束 - 但是由于某种原因 break() 命令不起作用,尽管 stop() 可以。不幸的是 stop() 不是我需要的,因为我需要多次运行模型。

模型中的第一个中断命令有效,但我将其保留为 dth>100,以便您自己查看

    n.steps <- 200
ns <- array(0,c(14,n.steps)) 
ns[13,1]<-rpois(1,3)
ns[14,1] <- 1 
k<-0

for (i in 1:n.steps){
  k<-k+1
  ns[13,1]<-rpois(1,2)
  death<-sample(c(replicate(1000, 
                            sample(c(1,0), prob=c(surv.age.a, 1-surv.age.a), size = 1))),1)
  ns[14,k] <- death

  if (death == 0) {
    dth <- sample(1:100, 1)
    if (dth > 100) {
      ns[14,k]<-0
      print("stop.1")
      break()

    } else {

      while (death == 0) {
        if (ns[13, k] > 0) {
          rep.vec[i]<-ns[13,k]

          ns[13, k] <- ns[13, k] - 1
          ns[14,k+1]<-1
          print("replace")

        } else {

          if (ns[13, k] == 0) {
            print("stop.2")
            ns[14,k+1]<-0
            break()
          }
        }
      }
    }
  }
}

【问题讨论】:

  • 使用break而不是break(),它不起作用。
  • 仍然无法正常工作:'(
  • 奇怪的是,之前的 break() 命令确实有效,所以我没想到会是这样
  • break 将带您退出最内层循环,它不会停止执行:在这种情况下,它将带您退出 while 循环而不是外部 for 循环。跨度>
  • 已根据您的要求更新

标签: r for-loop matrix break


【解决方案1】:

试试这个(只显示相关部分):

for (i in 1:n.steps){

   # ...

       break.out.of.for <- FALSE
       while (death == 0) {
        if (ns[13, k-1] > 0) {
            # ...        
        } else {
          if (ns[13, k] == 0) {
            # ...
            break.out.of.for = TRUE
            break
        }
       }
       if (break.out.of.for) {
         break
       }
}

【讨论】:

  • 他们不应在while 循环中使用break。相反,他们应该在while 循环中使用适当的条件。 death 在里面永远不会改变。 (可能他们根本不应该使用while 循环。没有一些解释很难说。)
  • @Roland 没有检查里面的逻辑,只是尝试满足 OP 的要求。
  • 这是while 循环的基本属性。你应该使用它的条件而不是if (...) break来打破它。
  • 我同意@Roland
  • 谢谢 - 这适用于我的目的 - 这里出现的其他问题来自我从更复杂的代码中删除它
猜你喜欢
  • 1970-01-01
  • 2015-01-10
  • 2016-08-22
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 2016-03-16
  • 1970-01-01
  • 2013-12-13
相关资源
最近更新 更多