2017-01-19 40 views
0

我想建立一个矩阵模型,如果某些条件被调用,结束 - 但由于某些原因,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() 
      } 
     } 
     } 
    } 
    } 
} 
+2

使用'break'而不是'break()',它不是功能。 –

+0

仍然不能工作:'( – redferry

+0

也奇怪的事先break()命令的工作,所以我不会想到它可能是, – redferry

回答

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

他们不应该在while循环中使用'break',而应该使用适当的条件在'while'循环中。 “死亡”永远不会改变。 (可能他们不应该使用'while'循环,很难说没有一些解释。) – Roland

+0

@罗兰没有检查里面的逻辑,只是试图满足OP的要求。 –

+2

这是“while”循环的基本属性。你应该使用它的条件而不是'if(...)break'来打破它。 – Roland