9 三心二意

流程控制可以幫助我們在程式中撰寫不同的劇本(scenario),根據不同的判斷條件執行不同的程式。在 R 語言中我們使用 ifelse ifelse 建立出不同的分支,它的外觀架構長得像這樣子:

if (條件一) {

    # 程式一

} else if (條件二) {

    # 程式二

} else {

    # 程式三

}

如果條件一的判斷結果為 TRUE 就執行程式一,條件二的判斷結果為 TRUE 就執行程式二;假如條件一與條件二的判斷結果皆為 FALSE,就執行程式三。如果有更多的條件,只要增加 else if 的個數即可。

9.1 兩個分支

舉例來說,一個喜愛運動的人早上起床會看天氣決定當天的行程,在兩種天氣條件下,使用 ifelse 就可以建立出一個兩種劇本的行程:

weather <- sample(c("sunny", "rainy"), size = 1)
weather
if (weather == "sunny"){
    print("Running outdoors!")
} else {
    print("Working out in the gym!")
}

如果 weather"sunny" 晴天,就在戶外跑步:

> weather <- sample(c("sunny", "rainy"), size = 1)
> weather
[1] "sunny"
> if (weather == "sunny"){
+     print("Running outdoors!")
+ } else {
+     print("Working out in the gym!")
+ }
[1] "Running outdoors!"

如果 weather 不是 "sunny" 晴天,就上健身房運動:

> weather <- sample(c("sunny", "rainy"), size = 1)
> weather
[1] "rainy"
> if (weather == "sunny"){
+     print("Running outdoors!")
+ } else {
+     print("Working out in the gym!")
+ }
[1] "Working out in the gym!"

9.2 三個分支

在三種天氣條件下,使用 ifelse ifelse 可以建立出一個三種劇本的行程:

weather <- sample(c("sunny", "rainy", "cloudy"), size = 1)
weather
if (weather == "sunny"){
    print("Running outdoors!")
} else if (weather == "cloudy"){
    print("Cycling!")
} else {
    print("Working out in the gym!")
}

如果 weather"sunny" 晴天,就在戶外跑步:

> weather <- sample(c("sunny", "rainy", "cloudy"), size = 1)
> weather
[1] "sunny"
> if (weather == "sunny"){
+     print("Running outdoors!")
+ } else if (weather == "cloudy"){
+     print("Cycling!")
+ } else {
+     print("Working out in the gym!")
+ }
[1] "Running outdoors!"

如果 weather"cloudy" 陰天,就去騎單車:

> weather <- sample(c("sunny", "rainy", "cloudy"), size = 1)
> weather
[1] "cloudy"
> if (weather == "sunny"){
+     print("Running outdoors!")
+ } else if (weather == "cloudy"){
+     print("Cycling!")
+ } else {
+     print("Working out in the gym!")
+ }
[1] "Cycling!"

如果 weather 既不是 "sunny" 亦不是 "cloudy" 那就去健身房運動:

> weather <- sample(c("sunny", "rainy", "cloudy"), size = 1)
> weather
[1] "rainy"
> if (weather == "sunny"){
+     print("Running outdoors!")
+ } else if (weather == "cloudy"){
+     print("Cycling!")
+ } else {
+     print("Working out in the gym!")
+ }
[1] "Working out in the gym!"

9.3 四個分支或更多

在四種或更多個天氣條件下,依然使用 ifelse ifelse 建立出一個四種劇本的行程:

weather <- sample(c("sunny", "cloudy", "drizzle", "showers", "storm"), size = 1)
weather
if (weather == "sunny"){
    print("Running outdoors!")
} else if (weather == "cloudy"){
    print("Cycling!")
} else if (weather == "drizzle") {
    print("Working out in the gym!")
} else {
    print("Couch potato.")
}

如果 weather"sunny" 晴天,就在戶外跑步:

> weather <- sample(c("sunny", "cloudy", "drizzle", "showers", "storm"), size = 1)
> weather
[1] "sunny"
> if (weather == "sunny"){
+     print("Running outdoors!")
+ } else if (weather == "cloudy"){
+     print("Cycling!")
+ } else if (weather == "drizzle") {
+     print("Working out in the gym!")
+ } else {
+     print("Couch potato.")
+ }
[1] "Running outdoors!"

如果 weather"cloudy" 陰天,就去騎單車:

> weather <- sample(c("sunny", "cloudy", "drizzle", "showers", "storm"), size = 1)
> weather
[1] "cloudy"
> if (weather == "sunny"){
+     print("Running outdoors!")
+ } else if (weather == "cloudy"){
+     print("Cycling!")
+ } else if (weather == "drizzle") {
+     print("Working out in the gym!")
+ } else {
+     print("Couch potato.")
+ }
[1] "Cycling!"

如果 weather"drizzle" 毛毛雨,就去健身房運動:

> weather <- sample(c("sunny", "cloudy", "drizzle", "showers", "storm"), size = 1)
> weather
[1] "drizzle"
> if (weather == "sunny"){
+     print("Running outdoors!")
+ } else if (weather == "cloudy"){
+     print("Cycling!")
+ } else if (weather == "drizzle") {
+     print("Working out in the gym!")
+ } else {
+     print("Couch potato.")
+ }
[1] "Working out in the gym!"

如果 weather 既不是 "sunny""cloudy" 亦不是 "drizzle" 就待在家裡看電視:

> weather <- sample(c("sunny", "cloudy", "drizzle", "showers", "storm"), size = 1)
> weather
[1] "storm"
> if (weather == "sunny"){
+     print("Running outdoors!")
+ } else if (weather == "cloudy"){
+     print("Cycling!")
+ } else if (weather == "drizzle") {
+     print("Working out in the gym!")
+ } else {
+     print("Couch potato.")
+ }
[1] "Couch potato."