在 R 中退出 for 迴圈

Jesse John 2023年1月30日 2022年5月18日
  1. R 中的 for 迴圈示例
  2. R 中的 break 關鍵字
  3. 使用 break 終止 R 中的巢狀 for 迴圈
  4. 在 R 中使用 break 關鍵字
  5. まとめ
在 R 中退出 for 迴圈

for 迴圈在 R 中有兩個特點。

  • 它迭代物件的元素。
  • 它不返回任何東西。

要在完成與物件中元素數量一樣多的迭代之前終止 for 迴圈,我們只有一個選擇:break 關鍵字。

R 中的 for 迴圈示例

我們首先建立一個向量,因為 for 迴圈遍歷物件的元素。for 塊中的變數儲存向量的當前元素的值。

for 迴圈的迭代次數與向量中的元素一樣多。

示例程式碼:

# Create a vector.
myVec = c("First Name", "Last Name", "Address", "Phone", "Country")

# The for loop.
# Here, elem is a variable that holds the current element of the vector myVec.
for(elem in myVec)
{
  print(elem)
}

輸出:

[1] "First Name"
[1] "Last Name"
[1] "Address"
[1] "Phone"
[1] "Country"

R 中的 break 關鍵字

break 關鍵字用於在迴圈執行後立即退出。它通常在滿足條件時使用。

在示例程式碼中,我們將在兩個不同迴圈的不同位置使用 break 關鍵字來顯示迴圈何時終止。

示例程式碼:

# Exit on the third iteration BEFORE printing the updated value of the elem variable.
for(elem in myVec)
{
  if(elem == "Address") {break}
  print(elem)
}

# Exit on the third iteration AFTER printing the updated value of the elem variable.
for(elem in myVec)
{
  print(elem)
  if(elem == "Address") {break}
}

輸出:

> # Exit on the third iteration BEFORE printing the updated value of the elem variable.
> for(elem in myVec)
+ {
+   if(elem == "Address") {break}
+   print(elem)
+ }
[1] "First Name"
[1] "Last Name"
>
> # Exit on the third iteration AFTER printing the updated value of the elem variable.
> for(elem in myVec)
+ {
+   print(elem)
+   if(elem == "Address") {break}
+ }
[1] "First Name"
[1] "Last Name"
[1] "Address"

使用 break 終止 R 中的巢狀 for 迴圈

我們可以巢狀 for 迴圈。如果我們的程式碼在巢狀的 for 迴圈中執行 break 關鍵字,它會立即跳出巢狀迴圈。

在執行了 break 的迴圈之後,控制返回到外迴圈的下一行。請參閱示例程式碼的輸出以進行說明。

我們將首先建立第二個向量來幫助說明巢狀 for 迴圈的中斷。我們將在巢狀迴圈的第三次迭代中使用 break 關鍵字,這發生在外迴圈的第二次迭代中。

需要注意的一點是外迴圈的第三次迭代被完全執行。

示例程式碼:

# Create another vector.
myVec2 = c("One", "Two", "Three")

# Break out of the inner loop in the third iteration of the inner loop
# which happens in the second iteration of the outer loop

# Outer for loop.
for(item in myVec2)
{
  # Nested for loop.
  for(elem in myVec)
  {
    cat(item, ": ", elem, "\n") # Used in place of print().
    if(item == "Two" && elem == "Address")
    {break}
  }
}

輸出:

One :  First Name
One :  Last Name
One :  Address
One :  Phone
One :  Country
Two :  First Name
Two :  Last Name
Two :  Address
Three :  First Name
Three :  Last Name
Three :  Address
Three :  Phone
Three :  Country

我們發現巢狀迴圈中的 break 關鍵字僅在滿足 if 條件時才影響該迴圈的執行。

外迴圈繼續它的迭代。這是因為 break 的條件涉及來自兩個迴圈的變數。

如果我們只使用內迴圈的條件,它將在每次外迴圈迭代時中斷。內迴圈不會在任何外迴圈迭代中完全執行。

示例程式碼:

# Break out of the inner loop in the third iteration of the inner loop
# The break will get executed in EVERY iteration of the outer loop.

# Outer for loop.
for(item in myVec2)
{
  # Nested for loop.
  for(elem in myVec)
  {
    cat(item, ": ", elem, "\n") # Used in place of print().
    if(elem == "Address")
    {break}
  }
}

輸出:

One :  First Name
One :  Last Name
One :  Address
Two :  First Name
Two :  Last Name
Two :  Address
Three :  First Name
Three :  Last Name
Three :  Address

我們發現巢狀迴圈中的 break 關鍵字在外迴圈的每次迭代中都被執行,因為每次都滿足 if 條件。

最後,讓我們看看將 break 關鍵字放在外迴圈中的效果。我們將在示例中的巢狀迴圈之後立即放置關鍵字。

if 條件在外部迴圈的第二次迭代中得到滿足,但 break 關鍵字出現在巢狀的 for 迴圈之後。所以巢狀迴圈在外迴圈終止之前被執行。

示例程式碼:

# Outer for loop.
for(item in myVec2)
{
  # Nested for loop.
  for(elem in myVec)
  {
    cat(item, ": ", elem, "\n") # Used in place of print().
  }
  if(item == "Two"){break} # Gets executed at the END of the second iteration of the outer loop.
}

輸出:

One :  First Name
One :  Last Name
One :  Address
One :  Phone
One :  Country
Two :  First Name
Two :  Last Name
Two :  Address
Two :  Phone
Two :  Country

在 R 中使用 break 關鍵字

當在 for 迴圈中使用 break 關鍵字時,我們需要使用我們的編碼邏輯來確保兩件事。

  • break 命令僅在我們想要的條件下執行。
  • 迴圈的其餘部分按照我們的意願執行。

print() 語句是一個可以幫助我們完成這項任務的工具。我們可以在最內層迴圈或每個迴圈中新增 print() 語句。

檢查輸出將向我們展示執行 break 命令的條件。

關於 R 函式的幫助

有關 R Studio 中 R 函式或關鍵字的幫助,請單擊 幫助 > 搜尋 R 幫助,然後在搜尋框中鍵入函式名稱或關鍵字(不帶括號)。

或者,在 R 控制檯的命令提示符處鍵入一個問號,後跟函式或關鍵字名稱。例如,?break

まとめ

break 關鍵字允許我們終止 R 中的 for 迴圈。它只終止它執行的迴圈。

在迴圈中新增 print() 語句有助於我們確定 break 命令是否在正確的條件下執行。

Author: Jesse John
Jesse John avatar Jesse John avatar

Jesse is passionate about data analysis and visualization. He uses the R statistical programming language for all aspects of his work.