研究室に配属されたばかりの新入生や、これからRで統計分析を始めたいと思っている方へ向けて、【R講座】では、RとRStudioの基本的な使い方から統計手法の選び方、基本的なデータ分析方法を解説しています。特にRが初めての方でも安心して学べるように、RStudioのクリック操作も紹介していきます。実際のコード例を交えながら進めるので、これからの研究やデータ分析に、役立てていただけたら嬉しいです。

みなさん、こんにちは!
前回のR講座では、ベクトルの基本について解説しました。
今回は、プログラミングに欠かせない基本的な制御文から、オリジナル関数の定義方法などを紹介していきます。
- 制御文
- オリジナル関数の定義
制御構文

Rの制御文を使うと、条件分岐や繰り返し処理を効率的に行えます。それぞれの文の使い方と使用例を詳しく解説します。
制御文 | 役割 |
---|---|
if | 条件が TRUE の場合に処理を実行 |
if-else | 条件が TRUE なら処理A、FALSE なら処理Bを実行 |
switch | 指定した値に応じて異なる処理を実行 |
for | 指定回数の繰り返し処理 |
while | 条件が TRUE の間繰り返し処理 |
repeat | break されるまで無限ループ |
break | ループを強制終了 |
next | ループの1回分の処理をスキップ |
条件分岐(if, else, switch)
if
if
は、指定した条件が TRUE
の場合に処理を実行します。
if (条件式) {
# 条件がTRUEのときに実行される処理
}
# x に値を代入
x <- 10
# 制御文(条件分岐)
if (x > 5) {
print("xは5より大きい")
}
[1] "xは5より大きい"
if-else
if
と else
を使うと、条件に応じて処理を分岐できます。if
の条件が FALSE
の場合に else
の処理が実行されます。
if (条件式) {
# 条件がTRUEのときに実行される処理
} else {
# 条件がFALSEのときに実行される処理
}
# x に値を代入
x <- 3
# 制御文(条件分岐)
if (x > 5) {
print("xは5より大きい")
} else {
print("xは5以下")
}
[1] "xは5以下"
if-else if-else
複数の条件を評価したい場合は else if
を使います。
if (条件1) {
# 条件1がTRUEのときの処理
} else if (条件2) {
# 条件2がTRUEのときの処理
} else {
# どの条件にも当てはまらないときの処理
}
# x に値を代入
x <- 0
# 制御文(条件分岐)
if (x > 0) {
print("xは正の数")
} else if (x < 0) {
print("xは負の数")
} else {
print("xはゼロ")
}
[1] "xはゼロ"
switch
switch は複数の条件の中から該当するものを選択する際に便利です。
switch(変数,
値1 = 処理1,
値2 = 処理2,
値3 = 処理3,
...
)
# オブジェクト「fruit」にappleを格納
fruit <- "apple"
# 制御文(条件分岐)
switch (fruit,
"apple" = "リンゴ",
"banana" = "バナナ",
"orange" = "オレンジ",
"不明")
# fruitの中身がリストの中身と一致したら、文字(カタカナ)を返す
[1] "リンゴ"

if-else と switch は、どちらも条件分岐を行うための構文ですが、使い方や適した場面 が異なります。
- 条件が論理式 (
TRUE/FALSE
) で決まる - 複雑な条件の分岐が可能
- 任意の比較演算 (
>, <, ==, !=, %in%
など) が使える
- 変数の値によって処理を分岐
- シンプルな条件分岐向き(複雑な条件は if-else の方が適している)
- 数値や文字列を直接評価(論理式は使えない)
繰り返し処理(for, while, repeat)
for
for
は、一定回数の繰り返し処理を実行する際に使用します。
for (変数 in 値の範囲) {
# 繰り返し実行する処理
}
# 制御文(iが1〜5の間繰り返す)
for (i in 1:5) {
print(i)
}
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
while
while
は、一定回数の繰り返し処理を実行する際に使用します。
while (条件式) {
# 条件がTRUEの間実行する処理
}
# x に1を代入
x <- 1
# 制御文(xが5以下になるまで繰り返す)
while (x <= 5) {
print(x)
x <- x + 1
}
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
repeat
repeat
は、一定回数の繰り返し処理を実行する際に使用します。明示的に break
することでループを終了します。
repeat {
# 無限ループする処理
if (条件) {
break # ループ終了
}
}
# x に1を代入
x <- 1
# 制御文(xを表示と加算を繰り返す; xが5より大きくなったら終了)
repeat {
print(x)
x <- x + 1
if (x > 5) {
break
}
}
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5

for、while、repeat はすべて ループ処理 に使われる制御構造ですが、それぞれ適した用途や動作の違いがあります。
比較項目 | for | while | repeat |
---|---|---|---|
用途 | 繰り返し回数が決まっている場合 | 条件が満たされている間繰り返す | 無限ループを作りたい場合 |
回数の決定 | 事前に決める | 実行中に決まる | break を使って決める |
終了条件 | 自動で終了 | 条件を満たさなくなったら終了 | break を明示的に指定 |
主な用途 | ベクトルやリストの要素を処理 | 事前に回数が分からないループ | 特定条件で終了するループ |
ループ制御(break, next)
ループする繰り返し処理は、break
やnext
を使って制御します。
break
break
を使うと、ループの途中で強制的に終了できます。多くの場合、if構文などの条件分岐を使って break
の条件を決定します。
if (条件式) {
break # 条件式を満たしたらループ終了
}
# 制御文
for (i in 1:10) {
if (i == 6) {
break # 6になったらループ終了
}
print(i)
}
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
next
next
を使うと、その回の処理をスキップして次のループへ進みます。多くの場合、if構文などの条件分岐を使って next
の条件を決定します。
if (条件式) {
break # 条件式を満たしたらループ終了
}
# 制御文
for (i in 1:5) {
if (i == 3) {
next # 3のときはスキップ
}
print(i)
}
[1] 1
[1] 2
[1] 4
[1] 5

これらの制御文を適切に活用して、プログラムを作成しましょう。
オリジナル関数の定義

Rでは、独自の関数を定義することで、コードの再利用性を高め、処理を効率化できます。ここでは、関数の基本的な定義方法、返り値の扱い、関数の保存と再利用について詳しく解説します。
基本的な関数の定義
Rで関数を定義するには、function()
関数を用います。
function()
関数の構造関数名 <- function(引数1, 引数2, …) {
# 関数内の処理(ここにコードを書く)
return(返り値) # 省略可能
}
return()
を省略すると、最後に評価された値が自動的に返されます。return()
は関数の処理を即座に終了させ、その値を返します。return()
の後にコードを書いても実行されません。
# 関数の定義
add_numbers <- function(a, b) {
result <- a + b
return(result)
}
# 関数の実行
add_numbers(3, 5)
[1] 8
デフォルト引数の設定
関数の引数にはデフォルト値を設定できます。
関数を定義するときに引数を設定し、引数を省略するとデフォルト引数が計算に使用されます。
# 関数の定義
power_function <- function(base, exponent = 2) {
return(base^exponent)
}
# デフォルト引数を使う
power_function(3) # 3^2
[1] 9
引数を明示的に指定すると、指定した引数が計算に使用されます。
# 関数の定義
power_function <- function(base, exponent = 2) {
return(base^exponent)
}
# デフォルト引数を使う
power_function(3, 3) # 3^3
[1] 27
関数の保存と再利用
Rで関数を定義した後、次回以降も使えるように保存する方法はいくつかあります。
ここでは、 Rスクリプト(.Rファイル) に保存する方法と、save()
を使ってオブジェクトとして保存する方法について解説します。
Rスクリプトで保存・読み込み
Rスクリプトは、Rのコードをテキストファイルに保存したものです。この方法では、関数を .R ファイルとして保存し、必要なときに source()
で読み込みます。

- [File] → [New File] → [R Script] を選択
- 左上ペインのエディタに関数を書き込む
- [File] → [Save As…] を選択し保存
- メモ帳(Windows)、テキストエディット(Mac)、VSCode などのエディタを開く
- 関数を記述し、ファイル名に拡張子を .R にして保存
Rスクリプトを保存したら、source()
を使って読み込むことで、定義した関数を利用できます。
# my_functions.R を現在の作業ディレクトリから読み込む
source("my_functions.R")
もし、 my_functions.R が別のフォルダにある場合は、フルパスを指定します。
# my_functions.R を現在の作業ディレクトリから読み込む
source("/Users/YourName/Documents/my_functions.R")
save() で保存・読み込み
スクリプトとして保存するほかに、関数を .RData ファイルとして保存し、後で読み込む方法もあります。
save()
を使うと、関数をオブジェクトとして .RData ファイルに保存できます。
# 関数を定義
my_function_1 <- function(a, b) {
return(a + b)
}
my_function_2 <- function(a, b) {
return(a * b)
}
# 2つの関数を"functions.RData" に保存
save(my_function_1, my_function_2, file = "functions.RData")
保存した .RData ファイルを load()
を使って読み込めば、関数を再利用できます。
# 保存した "functions.RData" を読み込む
load("functions.RData")
save()
は 関数だけでなく、データフレームやベクトルなどのオブジェクトも保存可能load(
) すると、保存されていたオブジェクトがすべて復元

Rスクリプトでの保存は、再利用しやすく、管理しやすいため、基本的には .Rスクリプトでの管理が推奨されます。ただし、関数やデータを大量に管理する場合は save()
を活用すると便利です。
まとめ
- 制御文
- 条件分岐(
if・if-else if・switch
) - 繰り返し(
for・while・repeat
)→break
とnext
で制御
- 条件分岐(
- オリジナル関数の定義
function()
で作成- RスクリプトかRdataとして保存・再利用

今回は、プログラミングの基本とオリジナル関数の定義を紹介しました。
Rではプログラミングを活用することで、分析の半自動化や大量のデータ解析をしやすくなります。また、オリジナル関数によく使う作業を関数化しておくことで、作業スピードがアップします。
次回は、データの入力方法について紹介します。