分類: R

R 流程控制與迴圈

迴圈控制

在 R 中可以使用的迴圈控制方式主要有 repeatwhilefor 這三種,雖然大部分的迴圈計算可以使用 R 的向量化運算來處理,不過在重複執行某區段的程式碼時,還是必須使用到這裡的迴圈控制結構。

repeat 迴圈

repeat 迴圈是最簡單的迴圈控制結構,它會讓 R 不斷得執行指定的程式碼,直到遇到 break 中斷迴圈的執行為止:

x <- 0
repeat {
  message("x = ", x)
  x <- x + 1
  if (x == 5) break
}
x = 0
x = 1
x = 2
x = 3
x = 4

當 R 在執行程式時若遇到 break 會直接跳出整個迴圈的執行,若只想要讓 R 跳過當次的迭代,執行下一次的重複動作,可以使用 next

x <- 0
repeat {
  x <- x + 1
  if (x %% 2 == 0) next
  message("x = ", x)
  if (x > 7) break
}
x = 1
x = 3
x = 5
x = 7
x = 9

上面這樣的程式碼會跳過所有 x 是偶數的迭代,只輸出奇數的 x 值。

while 迴圈

while 迴圈類似 repeat,不過它會先檢查指定的條件,在條件為 TRUE 的情況下才會執行迴圈的內容:

x <- 0
while (x != 5) {
  message("x = ", x)
  x <- x + 1
}
x = 0
x = 1
x = 2
x = 3
x = 4

while 迴圈中,同樣可以使用 breaknext

x <- 0
while ( x < 100 ) {
  x <- x + 1
  if (x %% 2 == 0) next
  message("x = ", x)
  if (x > 7) break
}
x = 1
x = 3
x = 5
x = 7
x = 9

任何的 repeat 迴圈都可以很簡單的改寫成 while 迴圈,反之亦然,通常如果迴圈至少要執行一次的狀況,就可以使用 repeat,如果迴圈可能會因為條件判斷不符合而完全不執行,則可使用 while,這樣可讓程式碼更容易被閱讀。

for 迴圈

for 迴圈主要是用在程式執行前就已經知道迭代次數的情況,它在執行時會將輸入向量中的每個元素值逐一指定給迭代變數,然後重複執行迴圈的內容:

for ( x in 0:4 ) {
  message("x = ", x)
}
x = 0
x = 1
x = 2
x = 3
x = 4

如果迴圈的內容只有一行運算式,也可以省略大括號:

for ( x in 0:4 ) message("x = ", x)
x = 0
x = 1
x = 2
x = 3
x = 4

for 迴圈不只可以處理整數,R 任何的向量都可以使用 for 迴圈來處理:

colors <- c("red", "blue", "yellow")
for (c in colors) {
  message("The color is ", c)
}
The color is red
The color is blue
The color is yellow

雖然 for 迴圈的寫法跟 R 的向量化運算類似,但實際上 R 向量化運算的效能跟 C 語言層級的迴圈相當,而 R 的 for 迴圈則不同,其執行效率上會差很多,所以在執行大量運算時,應盡可能避免使用 for 迴圈,改以向量化運算的方式代替。

Page: 1 2 3

G. T. Wang

個人使用 Linux 經驗長達十餘年,樂於分享各種自由軟體技術與實作文章。

Share
Published by
G. T. Wang

Recent Posts

[開箱] Marttiini MFT G10 芬蘭北歐直刀

本篇是 Marttiini M...

3 年 ago

[開箱] 一般打火棒、鎂塊打火棒

本篇是鎂塊打火棒與一般普通打火...

3 年 ago

[開箱] 瑞典 BAHCO 396-Lap 魚牌軍規摺疊鋸

本篇為瑞典 BAHCO 396...

3 年 ago

[DIY] 野炊水煮蛋、紅豆湯記錄

本篇記錄今年過年期間帶阿玄在家...

3 年 ago

[竹北素食] 善菓堂 SHAN GUO TANG

本篇是我最近去竹北善菓堂用餐時...

3 年 ago

Linux 複製檔案 cp 指令用法教學與範例

本篇介紹如何在 Linux 系...

3 年 ago