判斷 分為邏輯判斷以及條件判斷。
邏輯判斷 大於、等於、小於、大於等於、小於等於、不等於
1 2 3 4 5 6 7 8 9 10 11 12 13 > x <- 20 > x > 20 [1] FALSE > x == 20 [1] TRUE > x < 20 [1] FALSE > x >= 20 [1] TRUE > x <= 20 [1] TRUE > x != 20 [1] FALSE
條件判斷 1 2 3 4 5 6 7 > x <- 20 > if (x == 20) print ("x == 20") [1] "x == 20" > if (x > 15) print ("x > 15") else print ("x <= 15 ") [1] "x > 15"
switch
語句的判斷結構
1 2 3 4 5 6 7 8 > y <- 3 > switch(y, + print("a"), + print("b"), + print("c"), + print("d") + ) [1] "c"
函數 自定義與使用函數,以下這個例子是不用傳入參數,只要呼叫 fnTest() ,就會執行方法。
1 2 3 4 5 > fnTest <- function() { + print("噗噗。故我在") + } > fnTest() [1] "噗噗。故我在"
接著再做一個有放參數的方法,當傳入參數 x 與 y 之後,將由 x 到 y 做加總(當然 x 必須要小於 y 了,這樣才能執行迴圈,否則 x>y 的話,預設會為 0),如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 > fnTest2 <- function(x, y) { + sum <- 0 + if (x < y) { + for (i in x:y) { + sum <- sum + i + } + } + return(sum); + } > fnTest2(2, 8) [1] 35 > fnTest2(12, 8) [1] 0
迴圈 for 迴圈 透過 x:y 產生數值 x 到 y 的向量,再利用迴圈做循環以 cat
函數將字串顯示出來。
1 2 3 4 5 6 7 8 > for (i in 1:5) { + cat("num:", i, "\n") + } num: 1 num: 2 num: 3 num: 4 num: 5
while 迴圈 while
迴圈是除了 for
迴圈另外一種迴圈了,差異在於 while
是透過邏輯判斷進行迴圈,for
則是定義了有限的變數或向量物件來作迴圈,以下方的例子就是若判斷超過 10 的話,那麼就會跳出迴圈,跳出之後就不會再做任何的計算,是個相當容易閱讀的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 > x <- 1 > while (x <= 10) { + print(x) + x <- x + 1 + } [1] 1 [1] 2 [1] 3 [1] 4 [1] 5 [1] 6 [1] 7 [1] 8 [1] 9 [1] 10
repeat repeat
跟 while
相似,但是 repeat 的特性就是以無限迴圈開始建構的,除非有做判斷,否則都是繼續執行下去。以下的例子就是 y 的變數是從 1 加到 50,而 x 在 51 時跳出 (break) 迴圈。
1 2 3 4 5 6 7 8 9 10 11 > x <- 1 > y <- 0 > repeat { + if (x > 50) break; + y <- x + y + x <- x + 1 + } > x [1] 51 > y [1] 1275
break
表示跳出迴圈,相反的 next
則是跳出迴圈的某一個循環
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 > x <- sample(1: 10) > x [1] 4 7 10 9 2 5 6 8 3 1 > for (i in x) { + if (i > 4) { + print("the number > 4") + next; + } + print(i) + } [1] 4 [1] "the number > 4" [1] "the number > 4" [1] "the number > 4" [1] 2 [1] "the number > 4" [1] "the number > 4" [1] "the number > 4" [1] 3 [1] 1