3 控制流程

3.1 條件判斷

3.1.1 if-else敘述

if-else敘述使用在邏輯判斷,若需要依條件改變需要執行的程式碼,就會使用if-else,若if後所接邏輯判斷為真(TRUE),就會執行if下方之程式碼,若為偽(FALSE),則執行else下方之程式碼,若程式中沒有else片段,則不執行任何程式碼。

ifelse下方的程式碼必須要使用{}將程式碼包起來,若程式碼只有一行,可省略{},但為閱讀方便,建議不要省略{}

舉例來說,若考試分數大於等於60分,則印出及格字樣,小於60分則印出不及格字樣,程式範例如下:

## [1] "不及格"
## [1] "及格"

3.1.2 if-else if-else

很多時候必須要使用多重邏輯判斷,若考試分數大於等於90分,印出優良,介於60到90分間,印出及格,小於60分則印出不及格,此時就會用到多重邏輯,使用多重邏輯時,會在ifelse間新增邏輯區段else if,程式範例如下:

## [1] "優秀"

if-else if-else敘述是有順序的,若在if敘述判斷為真,就算後方else if判斷也為真,也只會執行if區段的程式碼,如上述範例,95分大於等於90分(if邏輯),也大於等於60分(else if邏輯),但最後只印出優秀字樣。

###巢狀if 巢狀if是指在if區段程式碼內包含其他if-else判斷,舉例來說,若國文分數與英文分數皆大於等於60分,印出全部及格,國文分數大於等於60分,英文小於60分,則印國文及格,英文再加油,以此類推,程式範例如下:

## [1] "國文及格,英文再加油"

###ifelse() ifelse()函數可用最短的方式取代if-else敘述,使用方法為ifelse(邏輯判斷,判斷為真要執行的程式碼,判斷為偽要執行的程式碼),依上述範例,重寫程式碼如下:

## [1] "及格"

值得注意的是,ifelse()可判斷向量,也就是可一次判斷多個元素

## [1] "不及格" "及格"   "不及格" "及格"   "及格"

##迴圈

###for R語言的for迴圈寫法和其他語言不同,首先必須建立需要逐一執行的參數向量或序列,再使用for迴圈逐一執行,程式寫法為for (單一變數 in 參數向量){ 程式碼 },範例如下:

## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
## [1] 8
## [1] 9
## [1] 10

for迴圈也可和if-else函數合併使用,如:

## [1] "奇數"
## [1] 2
## [1] "奇數"
## [1] 4
## [1] "奇數"
## [1] 6
## [1] "奇數"
## [1] 8
## [1] "奇數"
## [1] 10

###while while函數則是在每次執行迴圈時檢查while邏輯判斷是否為真,若邏輯判斷為真,就會執行區段程式碼,若邏輯判斷為偽,則會結束迴圈執行。

## [1] 0
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5

###break 若遇特殊情形想結束迴圈執行,可使用break指令

## [1] 1
## [1] 2
## [1] 3
## [1] 4

###next 若遇特殊情形想跳過迴圈執行,可使用next指令

## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 6
## [1] 7
## [1] 8
## [1] 9
## [1] 10

##purrr better than sapply() and lapply()