初心者用 R 言語講座演習ノート
13. 基本的なプログラミングの構文
基本的なプログラミングの構文について, かいつまんで簡単に説明します。
13.1 if 文
if 文は与えられた条件11が成立するときのみ、与えられた手続きを実行す る構文です。
例えば x > 0 のときに y を 1 にする、それ以外は y を 0 にするとい う手続きは
# # if文: x > 0 のときに y を 1 にする、それ以外は y を 0 にするという手続 # x <- 5 if (x > 0) { y <- 1 } else { y <- 0 } list("result = ", y)
result = | 1 |
とします。x = -5 にした後上記を実行し、y の値を調べてみましょう。 次に x = 3 にした後 上記を実行し、y の値を調べましょう。
if 文のより一般的な形式は以下の通りです。
# # if文の構文 # if (条件 1) { 条件 1 が成立したときの手続き } else if (条件 2) { 条件 1 が不成立、条件 2 が成立したときの手続き } else if (条件 3) { 条件 2 までが不成立、条件 3 が成立したときの手続き } else if ... : } else { 上記どの条件も成立しなかったときの手続き }
課題 13-1: 入力が 0 のときに 1、それ以外では 0 を返す関数 d を定義し ましょう。
## ## 課題 13-1: 入力が 0 のときに 1、それ以外では 0 を返す関数 d を定義し ## ましょう。 d <- function (x) { if ( x==0 ) { 1 } else { 0 } } d(0); d(1); d(-2)
[1] 1 [1] 0 [1] 0
13.2 while 文
while 文は与えられた条件が成立している間、与えられた手続きを繰り返 す構文です。
while 文の形式
条件文には&(論理積)や|(論理和)などの論理演算子が使えます。
# # while 文 # while (条件) { 条件が成立しているとき、実行する手続き }
です。
例えば
# # while文: 1 から 3 までが出力されます。 # x <- 1 while (x <= 3) { print(x); x <- x + 1 }
[1] 1 [1] 2 [1] 3
とすれば、1 から 3 までが出力されます。
- 最初に while 文に入ったとき、x は 1 なので、while 文の中の手続き である print(x)(x の値を表示する)が実行され、1 が表示されるととも に x <- x + 1 (x の値を 1 つ増やす)が 実行されます。while 文の最 後で x の値は 2 になっています。
- 次の while 文の条件判定において、x は 2 で 3 以下なので、while 文 の中の手続きであ る print(x)が実行され、2 が表示されるとともに x <- x + 1 (x の値を 1 つ増やす)が実行さ れます。while 文の最後で x の値は 3 になっています。
- その次の while 文の条件判定において、x は 3 で 3 以下なので、 while 文の中の手続き である print(x)が実行され、今回は 3 が表示さ れるとともに x <- x + 1 (x の値を 1 つ増やす)が実行されます。 while 文の最後で x の値は 4 になっています。
- その次の while 文の条件判定で x は 4 で 3 以下ではないので、条件 に合わず、while 文 から抜けます。
while 文の次の繰り返しを強制的に行う next、while 文から強制的に抜け る break 文な ども用意されている。
課題 13-2:
while 文を使って、1,3,5,7,9,11 を1行ずつ表示しましょう。
## ## 課題 13-2: ## ## while 文を使って、1,3,5,7,9,11 を1行ずつ表示しましょう。 ## n <- 1 while (n<13) { print(n) n <- n+2 }
[1] 1 [1] 3 [1] 5 [1] 7 [1] 9 [1] 11
13.3 for 文
for 文も while 文と同じ繰り返しですが、for 文では与えられた要素群の 中の要素1つ1つを変数に1回ずつ代入しながら繰り返し処理を行います。その 形式は、
# # for 文の構文 # for (変数 in 要素群) { 手続き }
です。
例えば、for (i in c(1,3,5)){ print(i) }で、1,3,5 が手続き中で使われ ている変数 i に毎回代入され、それが出力されます。
for (i in 1:5)){ print(i) }なら、1 から 5 までが変数 i に代入され、 それが出力されるでしょう。また以下の例は、1 から 5 までの二乗をベク トルにし ます。
# # for: 1 から 5 までの二乗をベクトルにし ます。 # x <- NULL for (i in 1:5) { x <- append(x, i**2) } x
[1] 1 4 9 16 25
- x <- NULL で空のベクトルを x に代入します。NULL は空を意味します。
- for 文で i に 1 から 5 までが順次代入され、代入の度に for 文の中 が実行されます。
- for 文の中で i の二乗(i**2)がベクトル x に追加されます。append(x, i)はベクトル x に i を追加する関数です14。
課題 13-3:
課題 12-2 を for 文を使って書き直しましょう。
実は for 文を使わなくても、x <- (1:5)**2 で同じことができる。
x <- c(x, i**2)でも良い。c はベクトルの連結にも使うことができる。
## ## 課題 13-3: ### 課題 12-2 を for 文を使って書き直しましょう。 ### 実は for 文を使わなくても、x <- (1:5)**2 で同じことができる。 ### x <- c(x, i**2)でも良い。c はベクトルの連結にも使うことができる。 (1:5)*2+1 seq(1,11,2) for (i in seq(1,11,2)) { print(i) }
[1] 3 5 7 9 11 [1] 1 3 5 7 9 11 [1] 1 [1] 3 [1] 5 [1] 7 [1] 9 [1] 11