Rの基本構文:コメント、変数、代入、および出力
前回のレッスンでは、RとRStudioをインストールし、最初のコードを1行実行しました
cat("Hello")。このレッスンでは、Rの「4つの基本的な構文要素」――コメント、変数、代入、出力――を徹底的に習得します。これが、今後28回のレッスンの基礎となります。
Rの構文は他の言語とは多少異なります。コメントには#が、代入には通常<-が、文字列の連結にはpaste()が、それぞれ+の代わりに使用されます。これら4つの違いを理解することが、Rコードを書く上での成功の半分を占めます。
1. 学習内容
- Rで1行コメントと複数行コメントを書く方法
- 変数の命名規則とベストプラクティス
- 4つの代入演算子の違い (
<-=-><<-) print()とcat()の出力関数の違い- 作業ディレクトリの概念とRStudioプロジェクトの使い方
Rscriptコマンドラインから R スクリプトを実行する
2. コメント:コードへの「コメント」の追加
コメントは人間が読むためのテキストであり、Rインタプリタはそれらを完全に無視します。しかし、コメントは単なる「飾り」ではなく、プログラマーにとって最も重要なコミュニケーションツールなのです。
(1) コメントはなぜ重要なのでしょうか?
6か月後に、自分が書いたコードを振り返る場面を想像してみてください:
# Code without comments:
x <- df %>% filter(age > 18) %>% mutate(group = ifelse(score >= 60, "pass", "fail"))
# Code with Comments:
# Filter 18 Adults aged 18 and older,and by score 60 Classified as "Approved"/Failed both groups
x <- df %>% filter(age > 18) %>% mutate(group = ifelse(score >= 60, "pass", "fail"))
後者はすぐに理解できるのに対し、前者を理解するには5分ほどかかります。これこそがコメントの価値なのです。
(2) Rのコメント構文
R 1行コメントのみ(#を使用)、/* */によるブロックコメントは不可:
| 構文 | 対応 | 説明 |
|---|---|---|
# This is a comment |
✅ | 1行コメント—Rでサポートされている唯一の方法 |
/* Multi-line */ |
❌ | R はサポートされていません。構文エラーが発生します |
// Single line |
❌ | R はサポートされていません。代わりに object '//' not found を返します |
(3) 複数行にわたるコメントはどのように扱えばよいですか?
Rにはネイティブな複数行コメント機能はありませんが、2つの回避策があります:
# Plan 1: Use this on every line # (Recommendations, Standard Practice)
# Line 1 Comments
# Line 2 Comments
# Line 3 Comments
x <- 10
# Plan 2:RStudio Keyboard Shortcuts(Most Commonly Used)
# Select multiple lines of code → Ctrl+Shift+C (macOS: Cmd+Shift+C)
# RStudio Automatically add to each line #,Click again to remove the comment
3. 変数と命名規則
変数は、データを格納するために使われる「容器」です。Rは動的型付け言語であるため、事前に型を宣言する必要はなく、変数に値を代入するだけで済みます。
(1) 命名規則(必ず遵守してください。遵守しない場合、エラーが発生します)
| ルール | 誤った例 | 正しい例 | 理由 |
|---|---|---|---|
| 文字、数字、アンダースコア、ピリオドのみを含めること | 2age <- 25 ❌ |
age2 <- 25 ✅ |
数字で始まってはならない |
| スペースを含めることはできません | my name ❌ |
my_name ✅ |
Rでは、スペースは構文上の区切り文字です |
| Rキーワードは使用できません | if <- 1 ❌ |
is_if <- 1 ✅ |
if は制御フローキーワードです |
| 大文字と小文字の区別 | Name と name は異なる変数です |
name(大文字小文字が統一されている) |
Rは大文字と小文字を区別します |
Name、name、NAMEは、それぞれまったく異なる変数です。
(2) 命名規則(推奨)
Rコミュニティには2つの主流な命名規則があります。どちらか一方を選んで、一貫して使い続けてください:
| スタイル | 例 | 使用例 |
|---|---|---|
| snake_case(アンダースコア) | user_name, total_count |
tidyverse スタイル(推奨) |
| dot.case | user.name, total.count |
旧式ベースR |
このチュートリアルでは、一貫してスネークケースを採用しています(dplyr や ggplot2 といった最新の R パッケージのスタイルに準拠しています)。
(3) 変数の表示
# Assignment
x <- 10
y <- 20
# View a Single Variable
x
# [1] 10
# View All Variables(Equivalent to Environment Pane)
ls()
# [1] "x" "y"
ls()よりもずっと直感的です。
4. 代入演算子:<- 対 =
Rには2つのトップレベルの代入演算子があります。これらは機能的にはほぼ同等ですが、<-の使用が推奨されます。
(1) 2つの文章スタイルの比較
| 寸法 | <- |
= |
|---|---|---|
| トップレベルの割り当て | ✅ | ✅ |
| 関数内でローカル変数を宣言する | ✅ | ❌ (それらは外側のスコープに渡される) |
| 関数呼び出しでの引数の渡し方 | ❌(同じ名前の変数が作成される) | ✅ |
| コミュニティの慣例 | ✅ Rによる公式推奨 | ❌ 混乱を招きやすい |
| 読みやすさ | ✅ 「右辺を左辺に割り当てる」という意味が明確に示されている | ⚠️ 数学の「等号」と混同される恐れがある |
# Writing Style 1:<- (Recommendations)
x <- 10
# Writing Style 2:= (Available but not recommended)
x = 10
(2) 逆割り当て -> およびグローバル割り当て <<-
Rには、さらに2つの「高度な」代入演算子があります:
| 記号 | 目的 | 推奨レベル |
|---|---|---|
x <- 10 |
標準配置(右から左) | ✅ 強く推奨 |
10 -> x |
逆割り当て(左から右) | ⚠️ レガシーコードを読む際の識別目的のみに使用 |
x <<- 10 |
グローバル代入(関数スコープを貫通) | ❌ ほとんど使用されない |
<<- と -> は ほとんど使用されません。初心者の方は、<- だけを使用すれば十分です。
(3) スペースの重要性:<- 対 < -
# Correct: Assignment
x <- 10
# Error: This is "less-than sign" Plus "negative 10" (Comparison x and -10)
x < -10
<- は必ずスペースで囲む必要があります。そうしないと、比較演算子として解釈されてしまいます。たった1つのスペースが欠けていても、結果が大きく変わってしまうことがあります。
5. 出力関数:print() 対 cat()
Rには、それぞれ異なる目的を果たす2つのよく使われる出力関数があります。
(1) 一目で違いがわかる表
| 特徴 | print() |
cat() |
|---|---|---|
| 文字列の引用符 | "Alice" を表示 |
Alice を表示しない |
| ベクトルインデックス | [1] 1 2 3 を表示 |
1 2 3 を非表示 |
| 複数パラメータの連結 | ❌ paste() が必要 |
✅ 直接連結 |
| 改行 | 自動改行 | 手動改行が必要 \n |
| 自動呼び出し | ✅ コンソールにオブジェクトを直接入力した場合 | ❌ 明示的に呼び出す必要がある |
| ユースケース | デバッグ、モニタリング | レポート・テキストの生成 |
(2) 実演
name <- "Alice"
age <- 25
# print() -- General Output (with [1] and quotation marks)
print(name)
# [1] "Alice"
# cat() —— Concatenated Output(Recommendations,More flexible)
cat("Name:", name, ",Age:", age, "\n")
# Name: Alice ,Age: 25
(3) その他の出力関数
| 機能 | 目的 | 利用例 |
|---|---|---|
message() |
通常のメッセージ(suppressMessages() で非表示にできます) |
長いスクリプトの実行中の進行状況表示 |
warning() |
警告(プログラムの実行は中断されません) | リスクがあることを示しますが、実行は続行されます |
stop() |
エラー(プログラム中断) | 致命的なエラー。tryCatch() によって処理される必要があります |
cat() を、デバッグや変数の値の確認には print() を使用してください。
6. 作業ディレクトリ
Rが起動すると、デフォルトで作業ディレクトリに移動し、すべてのファイルの読み書きはそこで行われます。
(1) 作業ディレクトリの重要性
graph LR
A["R Process"] --> B["Working Directory<br/>(work dir)"]
B --> C["data/sales.csv<br/>(Relative Path = ./data/sales.csv)"]
B --> D["scripts/clean.R<br/>(Relative Path)"]
B --> E["output/report.html<br/>(Relative Path)"]
style A fill:#fff3cd
style B fill:#d4edda
作業ディレクトリが間違っている場合、read_csv("data/sales.csv")はそのファイルを見つけられません。
(2) 作業ディレクトリの表示と設定
# View the current working directory
getwd()
# [1] "C:/Users/Alice/Documents"
# Set the working directory (Use / or \\, Do not use \)
setwd("C:/Users/Alice/Projects/my_r_project")
(3) 推奨されるアプローチ:RStudioプロジェクト
これを手動で行う setwd() と、エラーが発生しやすくなります(パスに漢字やスペースが含まれていると問題が生じる可能性があります)。RStudioプロジェクトの使用をお勧めします:
| 利点 | 説明 |
|---|---|
| 自動設定 | .Rproj ファイルを開くと、作業ディレクトリは自動的にプロジェクトのルートディレクトリに設定されます |
| プロジェクトの独立性 | 各プロジェクトには独自の .R 履歴、環境、パッケージがあり、プロジェクト間で干渉することはありません |
| ポータブル | パス競合を起こすことなく、プロジェクトフォルダ全体を他の人に送信 |
| Git対応 | RStudioプロジェクトをGitと統合するためのベストプラクティス |
graph LR
A["File → New Project"] --> B["Select New Directory → New Project"]
B --> C["Enter the project name r-tutorial"]
C --> D["RStudio Create .Rproj Documents"]
D --> E["Open later .Rproj<br/>Automatic Working Directory Setup"]
r-tutorial など)を作成し、すべての .R スクリプトをその中に配置することを強くお勧めします。
7. コマンドラインでの実行:Rscript
Rスクリプト(自動化、スケジュールされたタスク、またはWebバックエンド用など)をRStudioを開かずに実行したい場合は、Rscriptをご利用ください。
(1) スクリプトを作成する
任意の場所に「hello.R」という名前の新しいファイルを作成してください:
# hello.R
cat("Hello, World!\n")
(2) コマンドラインからの実行
ターミナル(cmd / Windowsの場合はPowerShell、macOSおよびLinuxの場合はTerminal)を開き、次のコマンドを実行してください:
Rscript hello.R
期待される出力:
Hello, World!
Rscript は、CI/CD、データパイプライン、Web API(R Plumber)などの場面で広く利用されており、すべてのRエンジニアが習得すべきコマンドです。
8. 完全な例:基本構文の総合的な練習
以下は、このレッスンで取り上げたすべての概念を結びつけた完全なワークフローの例です。
▶ サンプル:学生情報管理スクリプト
# ============================================
# Student Information Management Script
# File Name:student.R
# ============================================
# 1. Notes:Script Description
# Author:Alice
# Features:Define student information and output it
# Date:2026-07-02
# 2. Variable Assignment (Use <- No need =)
student_name <- "Alice"
student_age <- 20
student_score <- 95.5
is_passed <- TRUE
# 3. Use cat() Output (Recommendations, Flexible Assembly)
cat("=== Student Information ===\n")
cat("Name:", student_name, "\n")
cat("Age:", student_age, "\n")
cat("Score:", student_score, "\n")
cat("Did I pass?:", is_passed, "\n")
# 4. Use print() Debugging (with [1] Index)
print(student_name)
print(student_score)
# 5. Simple Calculations
final_score <- student_score * 0.6 + 100 * 0.4 # 60% End of Term + 40% Usually
cat("\nFinal Results(60% End of Term + 40% Usually):", round(final_score, 2), "\n")
# 6. Delete Variable(Use with caution)
rm(student_name, student_age, student_score, is_passed, final_score)
期待される出力:
=== Student Information ===
Name: Alice
Age: 20
Grades: 95.5
Did I pass?: TRUE
[1] "Alice"
[1] 95.5
Final Results(60% End of Term + 40% Usually): 97.3
(1) 手順
| ステップ | 操作 | 説明 |
|---|---|---|
| 1 | RStudioプロジェクトの作成 r-basics |
File → New Project |
| 2 | プロジェクト内に student.R を作成 |
Ctrl+Shift+N |
| 3 | 上記のコードをコピー | コード全体を貼り付け |
| 4 | すべて選択 → Ctrl+Enter |
コンソールに送信 |
| 5 | コンソールで出力を確認する | 「学生情報」が5行表示される |
❓ よくある質問
x <- 10 と x < -10 の違いは何ですか?x <- 10は代入(xに10を代入する)ですが、x < -10は比較(xが-10より小さいかどうかを確認する)です。たった1つのスペースの有無で、結果が大きく異なります。<-の前後にスペースを入れる習慣をつけましょう。📖 まとめ
- Rでは、
#を使用して1行のコメントを記述します(ブロックコメント用の/* */構文はありません)。RStudioのショートカットCtrl+Shift+Cを使用すると、複数の行を一度にコメントアウトできます。 - 変数名の命名規則:英数字、アンダースコア、ピリオドを使用すること。数字で始めることはできない。大文字と小文字を区別する。
snake_case形式の使用が推奨される。 - 推奨される代入演算子は
<-です(Rコミュニティの慣例)。関数に引数を渡す際には=を使用します。<-は必ずスペースで囲む必要があります(< -との混同を避けるため)。 - 出力関数:
print()一般([1]インデックス付き)、cat()連結(推奨、柔軟性が高い)、message()通常メッセージ、warning()警告、stop()エラー - 作業ディレクトリの設定を確認するには、
getwd()/setwd()を使用してください。パスに関する問題を回避するため、RStudioプロジェクトの使用を強く推奨します。 Rscript hello.Rを使用すると、コマンドラインから R スクリプトを実行できます。自動化、CI/CD、Web API などのシナリオに適しています。
📝 練習問題
-
基本演習:RStudioで新しいスクリプトを作成し、テキスト(
name)、年齢(age)、体重(weight、浮動小数点数)、学生かどうか(is_student、ブール値)、居住地(city)を格納するための5つの変数を定義してください。cat()を使用して、これらを連結し、次のような出力を生成してください:「私は [name] です。[age] 歳で、体重は [weight] kg です。[city] に住んでおり、[is_student] まだ学生です。」スクリプトを実行した後、スクリーンショットを撮り、保存してください。 -
基本演習:
r-basicsという名前の新しい RStudio プロジェクトを作成してください。そのプロジェクト内にvariables.Rという名前のスクリプトを作成し、異なる型(数値型、文字列型、論理型、複素数型、および nullNA)の変数を 5 つ定義してください。typeof()を使用して各変数の型を確認し、5つのtypeof()コマンドそれぞれの出力のスクリーンショットを撮影して保存してください。 -
応用問題:以下の機能を持つスクリプトを作成してください:①
paste()を使用して、"Hello"と"World"を連結し、「Hello-World」(sep = "-") を作成する; ②cat()を使用して結果を出力する; ③nchar()を使用して、連結された文字列の長さを確認する。スクリプトを実行した後、スクリーンショットを撮り、コンソールの出力を保存してください。 -
課題:以下の処理を行うRスクリプトを作成してください。①
setwd()を使用して、作業ディレクトリをtempdir()(Rの一時ディレクトリ)に変更する。②getwd()を使用して、現在の作業ディレクトリを出力する。③save.image()を使用して、ワークスペースをmy_workspace.RDataに保存する。④rm(list = ls())を使用してすべての変数をクリアする;⑤load("my_workspace.RData")を使用して再読み込みを行う。再読み込み後もすべての変数が残っていることを確認する。スクリプトの実行後、スクリーンショットを撮り、5つのステップすべての完全な出力を保存する。



