R言語の条件分岐に用いる文について解説していきます。
この記事では条件分岐に用いるif文の使い方や、多条件分岐で用いられるswitch文の使い方について見ていきます。
ここで扱うプログラミングコードは以下からダウンロードできます。
R言語 if文・switch文
条件分岐
R言語にはif文とswitch文が用意されており、これらを用いること条件分岐を表現することができます。
if文はifやelse if、elseを用いた条件分岐であり、switch文は他の言語のcaseなどに相当します。
if文
if文を用いることで条件分岐を表現でき、elseやelse ifを用いることで多条件分岐も表すことができます。
if(cond) expr
if(cond) cons.expr else alt.expr
cond | NAではない長さが1のロジカル型のベクトル(R 4.2.0から長さが1より大きいベクトルの場合エラーとなる)。ロジカル型に変換可能な型についても対応している。 |
expr, cons.expr, alt.expr | { expr1 ; expr2 }の形式の表現(expression)。 |
switch文
switch文で多条件分岐を表現することができます。等号の条件を複数並べる際にswitchを使います。
EXPR | 数値または文字列に等しいことを意味する表現(expression)。 |
... | その他の条件に関する表現のリスト。 |
実行例
R言語の条件分岐の実行例をまとめました。
if文の使い方やswitch文の使い方の例を見ることができます。
if文
まず、if文の実行例について見ていきます。
if文は次のようにifの後の()にlogical型の条件式を書き、{}の中に条件下で実行する式を書きます。
1 2 3 4 5 6 | #例1 x <- TRUE if (x) { print("x is TRUE") } |
xがTRUEであるため、if文中のprintが実行されているのが確認できます。
1 2 3 4 5 6 | > #例1 > x <- TRUE > if (x) { + print("x is TRUE") + } [1] "x is TRUE" |
また、else文を使うことでif文の条件以外のときの処理を表現することができます。
次の例は、xが偶数であるかそうでないかを判定しています。
1 2 3 4 5 6 7 8 9 10 11 | #例2 x <- 2 isEven <- TRUE if (x %% 2 == 0) { isEven <- TRUE print("even") } else { isEven <- FALSE print("odd") } |
実行するとxが2で偶数であるため、isEvenがTRUEのままであり、print文で"even"がコンソールに表示されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 | > #例2 > x <- 2 > isEven <- TRUE > if (x %% 2 == 0) { + isEven <- TRUE + print("even") + } else { + isEven <- FALSE + print("odd") + } [1] "even" > isEven [1] TRUE |
else if文を使うと3つ以上の条件分岐を表現することができます。
下の例は、xが5未満、5以上かつ10未満、10以上であるかを判定しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #例3 x <- 6 state_x <- "" if (x < 5) { state_x <- "x < 5" print("less than 5") } else if (x < 10) { state_x <- "5 ≤ x < 10" print("greater tnan or equal to 5 and less than 10") } else { state_x <- "10 ≤ x" print("greater than or equal to 10") } |
xが6であるため、else if文中でstate_xが"5 ≤ x < 10"になり、printで"greater tnan or equal to 5 and less than 10"がコンソールに表示されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | > #例3 > x <- 6 > state_x <- "" > if (x < 5) { + state_x <- "x < 5" + print("less than 5") + + } else if (x < 10) { + state_x <- "5 ≤ x < 10" + print("greater tnan or equal to 5 and less than 10") + + } else { + state_x <- "10 ≤ x" + print("greater than or equal to 10") + } [1] "greater tnan or equal to 5 and less than 10" > state_x [1] "5 ≤ x < 10" |
switch文
次にswitch文について見ていきます。
switch文を用いることでた条件分岐を表現でき、等号を用いた条件分岐の場合if文を用いるときよりも簡単に記述することが可能です。
以下、switch文の実行例です。switchの最初に等しいかどうか判定するオブジェクトを渡し、2つ目以降に条件とその条件下で実行する式を書きます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #例1 x <- "a" y <- 2 switch(x, a = { y <- 2 * y print("case of a") }, b = { y <- 3 * y print("case of b") }, c = { y <- 4 * y print("case of c") } ) |
xが"a"であるため、switch文中のb=以降の式が実行され、yが4になりprintで"case of a"と出力されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | > #例1 > x <- "a" > y <- 2 > switch(x, + a = { + y <- 2 * y + print("case of a") + }, + b = { + y <- 3 * y + print("case of b") + }, + c = { + y <- 4 * y + print("case of c") + } + ) [1] "case of a" > y [1] 4 |
また、=以降の分はEXPR型であればよいため、{}で囲ったものだけでなく関数も渡せます。
次の例は、typeの値によってxに適用する関数を分けています。
1 2 3 4 5 6 7 | #例2 x <- c(10, 15, 14, 12, 4, 15, 12, 6, 12, 10) type <- "median" switch(type, mean = mean(x), median = median(x)) |
typeが"median"であるため、switchを実行するとxの中央値が計算されます。
1 2 3 4 5 6 7 | > #例2 > x <- c(10, 15, 14, 12, 4, 15, 12, 6, 12, 10) > type <- "median" > switch(type, + mean = mean(x), + median = median(x)) [1] 12 |
まとめ
R言語の条件分岐について解説しました。
if文やswitch文を用いることで条件分岐を行うことができます。
if文では他の言語のようにelse if やelseを用いることで様々な条件分岐を構成できます。
switch文では、数値また文字列が等しいかに関する条件分岐にしか対応していないことに注意が必要です。