R 中的 Break 和 Next


2022年4月8日, Learn eTutorial
2408

我们已经在之前的教程中讨论了条件语句循环语句的基础知识。在本教程中,我们重点学习 R 编程语言中的循环控制语句。让我们继续学习每种类型的循环控制语句。

R 中的 Break 语句

在 R 编程语言中,break 是一个保留字,用于表示基本控制流结构之一。

循环中的 break 语句允许从当前迭代中突然终止,从而中断迭代的进一步执行。控制权将转移到循环语句之后的紧邻指令,以恢复程序执行。

  • 在嵌套 for 循环的情况下,break 语句会通过将控制权转移到外层循环来退出内层循环。
  • Break 语句用于 if..else 语句内部,以及 switch 语句中以终止执行。

语法


break
 

描绘程序遇到 break 语句时执行情况的流程图。

Break Flowchart

考虑一个程序,它迭代 for 循环中给定的代码块。使用 c() 函数创建了一个向量 v,其中包含一个元素列表,例如 "Learn"、"eTutorials"、"for"、"R"、"Program"。

当 R 代码开始执行时,迭代器变量 i 存储输入向量 v 的元素,检查迭代器变量 i 是否等于 3 这个作为 if 语句给出的条件,当条件不满足时,i 中的元素会被显示出来。另一方面,当 if 语句满足时,它会退出迭代。

迭代器变量 i If 语句 输出 v[i]
i=1 i==3 错误 V[1] = "Learn"
i=2 i==3 错误 V[2] = "eTutorials"
i=3 i==3 正确 break 退出执行

当 if 语句内部跟随一个 break 语句时,结束循环。并跳转到程序中的下一个后续指令。在我们给定的程序中,当迭代器变量 i 变为等于 3 (i==3) 时,提供了 break 语句以退出 for 循环。


#break statement in R
#vector v with 5 character values
v < -c("Learn", "eTutorials", "for", "R", "Program")

for (i in 1: 5) {
    if (i == 3) {
        break
    }
    print(v[i])
}
 

上述 R 源代码生成的输出显示,当 if 控制结构满足并且后面跟着一个 break 语句时,迭代通过中断 for 循环中序列的进一步执行而退出。


[1] "Learn"
[1] "eTutorials"

R 中的 Next 语句

在 R 编程语言中,next 语句允许通过跳过 for 循环或 while 循环内的任何迭代来继续执行程序,而不影响剩余的迭代。

next 这个保留字被评估时,当前正在执行的迭代会立即停止,并切换到从下一个紧邻的迭代或语句恢复执行。

语法


next
 

next 控制语句的流程图有助于轻松理解这个概念。

Next Flowchart

示例

考虑我们为 break 语句讨论的相同示例。在这里,您可以在代码中看到的唯一区别是,我们使用了另一种类型的控制结构(next 语句)而不是 break 语句来控制 R 程序的流程。

在 for 循环迭代期间,它会检查迭代器变量或任何给定条件是否满足。当 if 语句内部的某个条件满足时,if 语句内的代码开始执行。

如果确定了 next 语句,迭代器变量会跳过执行该序列,并继续执行 for 循环迭代中的下一个序列。
在给定的示例中,当 i 等于 3 (i==3) 时,条件满足,通过移动到下一个迭代即 i 变为 4 (i=4) 来执行 next 语句,跳过了 i 等于 3 时的进一步操作。

该表总结了存在 next 语句时 for 循环的工作方式。

迭代器变量 i If 语句 输出 v[i]
i=1 i==3 错误 V[1] = "Learn"
i=2 i==3 错误 V[2] = "eTutorials"
i=3 i==3 正确 next 移动到下一次迭代
i=4 i==3 错误 V[4] = "R"
i=5 i==3 错误 V[5] = "Program")

#next statement in R
#vector v with 5 character values
v < -c("Learn", "eTutorials", "for", "R", "Program")

for (i in 1: 5) {
    if (i == 3) {
        next
    }
    print(v[i])
}
 

生成的输出是


[1] "Learn"
[1] "eTutorials"
[1] "R"
[1] "Program"