2.2 条件分岐:if

逐次処理では,記述されたコードが上から順番に実行されるということを説明した. では,状況によって実行したいコードを変えたい場合にはどのようにすればよいだろうか. 例えば,変数xの値が1であれば関数f1()を,値が0であれば関数f0()を実行したいとする. 逐次処理的に

a <- 0
f1(a)
f0(a)

と記述すると,もちろんf1(a)f0(a)も実行されてしまう. どのケースであれエラーが出ないのであれば問題なく処理されるが,もしf1,f0はそれぞれ1と0の場合しか受け付けず,それ以外ではエラーを返すような関数であれば,この処理は必ずエラーを引き起こすことになる.

このように,場合わけして実行される処理を変えたいときにif文が利用される. 具体的には

if (条件式1) {
    処理
} else if(条件式2) {
    処理
} else {
    処理
}

のように記述する.if(条件式)の条件式には,必ずTRUE, FALSEとして評価される値が返すように記述する必要があることに注意されたい.

if文も上から順番に評価が行われ,最初に条件式がTRUEと評価された処理を実行し,その他の場合の処理は行わずif文の次の処理が行われる.

実際に例を見てみよう.

x <- 2

if (x == 0) {
    print("this is 0")
}else if(x == 1) {
    print("this is 1")
}else if(x == 2) {
    print("this is 2")
}else{
    print("unknown")
}
## [1] "this is 2"

ここではxは2なのでthis is 2が表示される.

Exercise 2.2 (条件分岐) 次の問いに答えよ.

  1. 変数stech-ml-studymeetingという文字列を格納し,sの文字列の6~7文字目がmlという文字列であれば,hello,そうでなければgoodbyeという文字列を表示する処理を書け.

  2. 変数yに21を代入し,yの値が3で割り切れるならyes,そうでなければnoと出力処理を書け.