初心者用 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

Author: suzuki@iwate-u.ac.jp 鈴木正幸,非常勤講師

Created: 2021-11-24 水 21:11

Validate