分岐処理

条件を判断して、分岐処理を行う文として ifswitch がある。switch 文による条件判断は、文字列比較によって行われる。計算式などは利用できない。一方、if 文では計算式なども利用でき柔軟度が高い。

if 条件文

if 文は「もし~ば・・・をする」のような処理を行うときに用いる。例えば、ij が同じであれば、「i eq. j」と出力するスクリプトは次のようになる。

i <- 10
j <- 10

if (i == j) {
	print("i eq. j !")
}

if 文に対して「もし~ならば・・・をする、そうでなければ ― をする」のような処理は if 文と else 文で行う。例えば ij が同じならば、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 文を用いる場合は、条件判断は文字列比較によって行われる。

例えば xy に数値を代入して、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 にはそれに似た働きをする構文(ifelsewhich)が用意されている。

例えば、あるベクトル 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"