【问题标题】:How to break from only certain loops in R如何打破R中的某些循环
【发布时间】:2018-06-15 12:23:50
【问题描述】:

我目前在 R 中运行三个 for 循环,当我遇到特定条件时,我想单独从较低的 2 个循环中中断,但在顶级循环中继续。

这是一个仅从最低级别循环中断的示例,即在本例中为“b”。我想打破'a'和'b'循环并返回循环'i':

for (i in 1:10) {
  for (a in 1:10) {
    for(b in 1:10) {

      if (b == 7) { break }

    }
  }
}

【问题讨论】:

  • 我想你想通过而不是打破

标签: r nested-loops


【解决方案1】:

1) 函数 将内部的两个循环放在一个函数中,然后像这样从它返回:

inner <- function(i) {
  for (a in 1:3) {
    for(b in 1:3) {
      cat("i,a,b:", i, a, b, "\n")
      if (b == 2) return()
    }
  }
}

for (i in 1:3) {
  inner(i)
}

给予:

i,a,b: 1 1 1 
i,a,b: 1 1 2 
i,a,b: 2 1 1 
i,a,b: 2 1 2 
i,a,b: 3 1 1 
i,a,b: 3 1 2 

2) second break 另一种可能性是在 a 循环中执行第二次测试:

for (i in 1:3) {
  for (a in 1:3) {
    for(b in 1:3) {
      cat("i,a,b:", i, a, b, "\n")
      if (b == 2) break
    }
    if (b < 3) break
  }
}

给予:

i,a,b: 1 1 1 
i,a,b: 1 1 2 
i,a,b: 2 1 1 
i,a,b: 2 1 2 
i,a,b: 3 1 1 
i,a,b: 3 1 2 

【讨论】:

    【解决方案2】:

    也许你应该考虑用一个while循环替换最内部的for循环

    for(i in 1:10){
      for(j in 1:10){
        k <- 1
        while(k < 7){
          k <- k + 1
          cat(sprintf("hallo %d %d %d\n",i,j,k))
        }
      } 
    }
    

    【讨论】:

      猜你喜欢
      • 2016-09-30
      • 1970-01-01
      • 2013-01-30
      • 2015-10-04
      • 2013-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多