条件を判断して、分岐処理を行う文として if
と switch
がある。switch
文による条件判断は、文字列比較によって行われる。計算式などは利用できない。一方、if
文では計算式なども利用でき柔軟度が高い。
if 条件文
if 文は「もし~ば・・・をする」のような処理を行うときに用いる。例えば、i
と j
が同じであれば、「i eq. j」と出力するスクリプトは次のようになる。
i <- 10
j <- 10
if (i == j) {
print("i eq. j !")
}
if
文に対して「もし~ならば・・・をする、そうでなければ ― をする」のような処理は if
文と else
文で行う。例えば i
と j
が同じならば、x
に 1 を代入し、そうでなければ x
に 2 を代入する例は次のようになる。
i <- 10
j <- 10
if (i == j) {
x <- 1
} else {
x <- 2
}
x
## [1] 1
条件が複数存在するとき、if else
を入れ子構造にすることで、分岐処理を行える。
i <- 2
if (i == 1) { # i が 1 ならば x に A を代入
x <- "A"
} else if (i == 2) { # i が 2 ならば x に C を代入
x <- "C"
} else if (i == 3) { # i が 3 ならば x に G を代入
x <- "G"
} else { # i が 1, 2, 3 以外ならば x に T を代入
x <- "T"
}
x
## [1] "T"
switch 分岐文
switch
文を用いる場合は、条件判断は文字列比較によって行われる。
例えば x
と y
に数値を代入して、op
に 1 を代入したら x
+ y
の計算を行い、2 を代入したら x
- y
の計算を行い、3 を代入したから x
× y
の計算を行い、4 を代入したら x
÷ y
の計算を行う処理をしたい場合は、次のようにする。
最後の stop
は、op
が 1、2、3、4 のどれでもないときにエラーを発生するようにしている。
op <- "1"
x <- 10
y <- 20
ans <- switch(op,
"1" = x + y,
"2" = x - y,
"3" = x * y,
"4" = x / y,
stop("Only can use 1, 2, 3, and 4")
)
ifelse 関数と which 関数
他のプログラミング言語には三項演算子と呼ばれるものがある(例 x = a ? "真" : "偽")。R にはそれに似た働きをする構文(ifelse
と which
)が用意されている。
例えば、あるベクトル x
について、その各要素が奇数ならば "o" を、偶数ならば "e" を返すスクリプトは以下のように書ける。
x <- c(1, 2, 3, 4, 5, 6)
y <- ifelse(x %% 2 == 1, "o", "e")
y
## [1] "o" "e" "o" "e" "o" "e"