R 中的内部循环中的中断功能如何?

How does a break function in the inner loop in R?

while (statement 1){
  ......
  ......
  if (statement 2){
    x <- x + 1
    break
  }
  if (statement 3){
    y <- y + 1
  }
}

我有一个伪代码如上图,我想验证一下我的理解是否正确。是不是当statement 2满足的时候,第一个if loop的方程还是运行,然后就打破了if loop,即使[=14]也再也回不来了=] 还在继续吗?

我正在寻求有关这种情况下中断功能的解释。

您可以通过这个简单的例子来验证它是如何工作的:

num <- 2
x <- 0
y<- 0

while (TRUE){
   if (num %% 10 == 0){
     cat('\nprinting from 1: ', num)
      x <- x + 1
      break
    }
   if (num %% 2 == 0){
     cat('\nprinting from 2: ', num)
     y <- y+ 1
   }
   num <- num + 1
}


#printing from 2:  2
#printing from 2:  4
#printing from 2:  6
#printing from 2:  8
#printing from 1:  10

x
#[1] 1
y
#[1] 4

while(TRUE) 使其 运行 无限期。每次 num 被 2 整除时 y 递增,当 num 被 10 整除时它递增 y 并且 while 循环中断。

简而言之,break 在您编写循环的确切位置停止循环,而无需 运行ning 以下任何代码。您可以通过编写一些简单的语句并定义 xy 来对此进行测试。 message 在这里是一个有用的函数,因为您可以验证代码的哪一部分仍然 运行s.

x <- 1
y <- 1

while (x < 100){
  if (x == 1){
    x <- x + 1
    break
  }
  message(x)
  if (y < 100){
    y <- y + 1
  }
  message(y)
}

在这个例子中,第一个 运行 已经被打断,因为 x == 1 从一开始就为真。您会注意到没有打印任何消息,但 x 的值现在是 2。

在第二个例子中,我编了一个语句,经过几次迭代后就会变成真的。现在每次迭代都会打印值为 xy 的消息,但是一旦 y > 10 什么都不打印,循环会立即停止。

x <- 1
y <- 1

while (x < 100){
  if (y > 10){
    x <- x + 1
    break
  }
  message(x)
  if (y < 100){
    y <- y + 1
  }
  message(y)
}

例如,breakstop 的区别在于它只会中断最内层的循环(并且 stop 会打印一条 stop/error 消息).这意味着如果您的代码位于另一个循环中,则该外部循环将继续。例如:

for (x in 1:10) {
  y <- 1
  while (x < 100){
    if (y > 10){
      x <- x + 1
      break
    }
    message(x)
    if (y < 100){
      y <- y + 1
    }
    message(y)
  }
}