Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何跳转到下一个顶级循环?_R_Loops_Nested Loops - Fatal编程技术网

R 如何跳转到下一个顶级循环?

R 如何跳转到下一个顶级循环?,r,loops,nested-loops,R,Loops,Nested Loops,我有一个for循环嵌套在另一个for循环中。我怎样才能使它在内部循环中发生某些事情时,退出并跳转到外部循环的下一个迭代 uuu <- 0 for (i in 1:100) { uuu <- uuu + 1 j <- 1000 for (eee in 1:30) { j <- j - 1 if (j < 990) { # if j is smaller than 990 I hope s

我有一个
for
循环嵌套在另一个
for
循环中。我怎样才能使它在内部循环中发生某些事情时,退出并跳转到外部循环的下一个迭代

uuu <- 0

for (i in 1:100) {
    uuu <- uuu + 1
    j <- 1000
    for (eee in 1:30) {
        j <- j - 1
        if (j < 990) {
            # if j is smaller than 990 I hope start next time of i
        }
    }
}

uuu我认为您希望使用
break
这样R将停止通过内部
for
循环,因此继续执行外部
for
循环的下一次迭代:

for (i in 1:10) {
   for (j in 1:10) {
      if ((i+j) > 5) {
         # stop looping over j
         break
      } else {
         # do something
         cat(sprintf("i=%d, j=%d\n", i, j))
      }
   }
}
# i=1, j=1
# i=1, j=2
# i=1, j=3
# i=1, j=4
# i=2, j=1
# i=2, j=2
# i=2, j=3
# i=3, j=1
# i=3, j=2
# i=4, j=1

@弗洛德尔对此有正确的答案,即使用
break
而不是
next
。不幸的是,无论使用哪种控制流构造,该答案中的示例都会给出相同的结果

我添加下面的示例只是为了弄清楚这两个构造的行为是如何不同的

## Using `break`
for (i in 1:3) {
   for (j in 3:1) {     ## j is iterated in descending order
      if ((i+j) > 4) {
         break          ## << Only line that differs
      } else {
         cat(sprintf("i=%d, j=%d\n", i, j))
      }}}
# i=1, j=3
# i=1, j=2
# i=1, j=1

## Using `next`
for (i in 1:3) {
   for (j in 3:1) {     ## j is iterated in descending order
      if ((i+j) > 4) {
         next           ## << Only line that differs
      } else {
         cat(sprintf("i=%d, j=%d\n", i, j))
      }}}
# i=1, j=3
# i=1, j=2
# i=1, j=1
# i=2, j=2   ##  << Here is where the results differ
# i=2, j=1   ##
# i=3, j=1   ##
###使用“break”`
(我在1:3中){
对于(3:1中的j){##j按降序迭代
如果((i+j)>4){
休息(4){

下一个##请参见:
next
break
,但这里我更希望有一个内部循环,如:
for(j in 1000:970){…}
+1-我同意这是OP问题的正确答案。我自己只添加了一个答案b/c我希望更好地强调
下一步
中断
的区别。也许只添加一个中断指示器来中断两个循环