Rの分岐処理


Rで条件を判断して分岐処理を行うには、「if」と「switch」などを用います。「switch」による条件判断は、文字列比較によって行われ、計算式などは利用できません。一方、「if」では計算式なども利用でき柔軟度が高いです。ここでは、「if」、「switch」、「ifelse」と「which」による分岐処理についてまとめておきます。

if

「もし~であれば・・・をする」のようなときに用います。

if (条件){
}

「else」を入れ子構造(「もし~であれば・・・をして、それ以外じゃ・・・をする」)にすることで、分岐処理を行うことがきます。

if (条件){
} else if (条件) {
} else {
}
}

switch

「switch」 での条件判断は文字列比較によって行われます。下記の例は、x = 10, x = 20の場合に、op = 1ならans = x + y = 10 + 20 が実行される。最終行の「stop (“Only can use 1, 2, 3, and 4”)」はop=1,2,3,4以外では「エラー: Only can use 1, 2, 3, and 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”)
)

ifelsewhich

他のプログラミング言語には三項演算子( ternary operator: Excelの IF 関数のようなもの ) と呼ばれるものがある(例 x = a ? “真” : “偽”)。それに似た働きをする構文として「ifelse」 と 「which」があります。これらは、 「if ~ else ~」を一文で書きたいときに使う演算子のことです。 たとえば、下記の例では、ベクトルvalの数値が1の場合は、“true case”、それ以外の場合は“false case”となります。

val <- c(1,2,3,1,2,3,1,2,3)
x <- ifelse(val==1, “true case”, “false case”)

[1] “true case” “false case” “false case” “true case” “false case” “false case” “true case” “false case” “false case”

n個からなるxベクトルの最大値を求める場合は次のように求めることができます。

x <- c(1,3,2,-3,5,12,9,-2,10,7)
max(x)
[1] 12

データ解析等では、最大値でなく何番目の要素であるかについて知りたい場合があります。この場合は、「which」を利用することで求めることができます。

which(x == max(x))
[1] 6

「which」は行列などにも同様に使うことができます。