为什么break()在这个循环中不起作用? (但停止是)

时间:2017-01-19 12:29:38

标签: r for-loop matrix break

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

模型中的第一个break命令有效,但是我把它留在了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()
          }
        }
      }
    }
  }
}

1 个答案:

答案 0 :(得分:2)

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

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