はじめに
ここでは、R初心者向けに「制御文」について解説していきます。
条件分岐
条件によって処理を分けたい場合に使います。
if文
if
に続く条件式がTRUE
なら、処理が実行されます。
x <- 2
y <- 2
if (x == y) {
print("xとyは等しい。")
}
この例では、x == y
はTRUE
となるので、xとyは等しい。
と出力されます。
また、else
を入れると、if
に続く条件式の判定がTRUE
でなかった場合の処理を記述できます。
x <- 2
y <- 3
if (x == y) {
print("xとyは等しい。")
} else {
print("xとyは等しくない。")
}
さらに、else if
を入れると、それより上の条件式の判定が全てFALSE
で、else if
に続く条件式がTRUE
だったときの処理を記述できます。
x <- 2
y <- 3
if (x == y) {
print("xとyは等しい。")
} else if (x == 2){
print("xとyは等しくないが、xは2である。")
} else {
print("xとyは等しくなく、xは2ではない。")
}
if (x == 2 && x != y){
print("xは2であり、xとyは等しくない。")
}else if (x == y || y == 4) {
print("xとyは等しい、またはyは4である。")
} else {
print("よく分からない。")
}
if (x == 2) {
if (y == 3) {
print("xは2であり、yは3である。")
} else if (x == y) {
print("xとyは2である。")
} else {
print("xは2であり、yは2でも3でもない。")
}
} else if (x == 3) {
print("xは3である。")
} else {
print("xは2でも3でもない。")
}
switch文
変数の値によって処理を分けたいときなどに使います。
z <- 3
switch (z,
"1" = print("zは1です。"),
"2" = print("zは2です。"),
"3" = print("zは3です。"),
print("それ以外です。")
)
以下のように、if
でも書き換えることはできますが、やや長くなり可読性も下がります。
z <- 3
if (z == 1) {
print("zは1です。")
} else if (z == 2) {
print("zは2です。")
} else if (z == 3) {
print("zは3です。")
} else {
print("それ以外です。")
}
反復処理
同じ処理を複数回繰り返す時に使います。
for文
一定回数だけ同じ処理を繰り返す時に使います。
for (i in 1:5) {
print(i)
}
nums <- seq(1, 5)
for (i in nums) {
print(i)
}
break
を使うと、反復処理を中止することができます。if
と組み合わせて、特定の条件が成立した時に処理を中止するといったときに使うことが多いです。
nums <- seq(1, 5)
for (i in nums) {
if (i == 3) {
break
}
print(i)
}
next
を使うと、反復処理をスキップすることができます。こちらもifと組み合わせて使うことが多いです。
nums <- seq(1, 5)
for (i in nums) {
if (i == 3) {
next
}
print(i)
}
while文
ある条件が成立する間のみ反復処理をする場合に使います。
num <- 1
while (num < 5) {
print(num)
num = num + 1
}
while (num < 5) {
num = num + 1
print(num)
}
whileの中も上から下へ順番に処理が実行されるため、書き方によって実行結果が変わる場合があります。
変数の値の更新を書き忘れると、処理が無限回数繰り返される(無限ループとなる)ので注意が必要です。
num <- 1
# while (num < 5) {
# print(num)
# }
# while (TRUE) {
# print(num)
# }
repeat文
無限ループになります。
処理を止めるために、break
などを書く必要があります。
num <- 1
repeat {
if (num < 5) {
print(num)
num <- num + 1
} else {
break
}
}
反復回数が決まっている場合はforを、反復回数が決まっていない場合はwhile(またはrepeat)を使うようにすると良いです。
まとめ
ここでは、Rの制御文として「if」「switch」「for」「while」「repeat」を紹介しました。
プログラミングの中心とも言える構文なので、実際に使いながら身につけていくと良いでしょう。