123 + 456[1] 579
This version: 2026-09-23
Posit Cloud(旧名:RStudio Cloud)というサービスを利用して、次の手順によりRの開発環境を準備する
※卒論など本格的にRを使う場合はPosit Cloudではなく大学のPCを利用するか、自身のPCにRとR Studioをインストールして使用することをおすすめする。
Rスクリプト(R言語のコードを記述するテキストファイル)の新規作成を行うには、RStudio左上の「白い紙に(+)のマークがついているようなアイコン」をクリックし、「R Script」をクリックする
RStudioの基本画面はこの4つの領域からなる。
Rでは電卓やExcelで計算するのと同様に計算を行うことができる。
123 + 456[1] 579
分析対象のデータや計算結果の値などのデータを格納するもののことをオブジェクト(object)や変数(variable)と呼ぶ。
あるオブジェクトに何らかの値を代入するときは、=や<-という記号(演算子)を使う。 (なお、Rは<-による代入のほうが正統な記法である)
RStudio上では、<-はAltと-のキーを同時に押すことで簡単に入力できる(Macの場合はOption + -)。
x <- 1 + 1 # オブジェクト x に 1+1の演算結果を代入オブジェクト単体でコードを実行すれば、オブジェクトの中身を表示することができる。
x # オブジェクト x の中身を表示[1] 2
また、RStudioの[Environment]部を見ることでも確認することができる。
プログラミング言語では、データの型というものを意識する必要がある。
例えば、クォーテーション("や')で囲っているものは文字列(character)型となるため、"1" + 1のような演算はできない点に気をつける。
Rの基本的なデータ型は次の通り。
| データ型 | 例 |
|---|---|
| 数値(numeric) | 1、0.1 |
| 文字列(character) | “A”、“あいうえお” |
| 論理値(logical) | TRUE、FALSE、T、F |
ベクトル(vector)という、複数の値が一列にならぶようにして入れられた形式のオブジェクトがある。
Excelでいうとデータを1行あるいは1列取り出したようなものにあたる。
ベクトルを作りたいときは、c()にカンマで区切りながら値を入れていく。 cはcombine(結合)のcである。
# ベクトル
y <- c(1, 20, 100)
y[1] 1 20 100
1~10の整数が入ったベクトルが欲しい時などは、1:10のように 始めの数と終わりの数で:を挟むように記述する。
# 1~10の整数
x <- 1:10
x [1] 1 2 3 4 5 6 7 8 9 10
文字列のデータを扱うときはクォーテーション("や')で囲う。
z <- c("あ", "いう", "えおか") # これならエラーにならない
z[1] "あ" "いう" "えおか"
クォーテーションで囲まない場合はオブジェクト扱いになる
z <- c(あ, いう, えおか) #これだとエラー(「あ」「いう」「えおか」というオブジェクトを定義していないため)日本語のオブジェクトに値を代入することもできるが、日本語はエラーの元なのでできるだけ避けたほうがよい
# 「あ」「いう」「えおか」をそれぞれ定義
あ <- "A"
いう <- "IU"
えおか <- "EOKA"
# これならエラーにならない
z <- c(あ, いう, えおか)
z[1] "A" "IU" "EOKA"
1つのベクトルには1つのデータ型のデータしか入れることができない。
onetwothree <- c(1, "1", 2, "二", 3) #全部文字列(chr)になる
onetwothree[1] "1" "1" "2" "二" "3"
LETTERSは大文字のアルファベットが入ったベクトルで、あらかじめ定義されている。
LETTERS [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S"
[20] "T" "U" "V" "W" "X" "Y" "Z"
ベクトルの要素を取り出すには、ベクトル[要素の番号] のように指定する。
LETTERS[1] # LETTERSの最初の要素[1] "A"
LETTERS[1:3] # LETTERSの1~3番目の要素[1] "A" "B" "C"
LETTERS[c(1, 12, 23)] # LETTERSの1,12,23番号の要素[1] "A" "L" "W"
何らかの処理を行う機能を持ったオブジェクトを関数(function)あるいはメソッド(method)という。
sum(1:100) # sum: 数値ベクトルの合計値を返す[1] 5050
length(LETTERS) # length: ベクトルの長さ(要素数)を返す[1] 26
関数の使い方など、わからないことがある場合はヘルプを参照すると便利である。
ヘルプは
help()に入れて実行する?をつけて実行するF1キーを押すといった方法で呼び出すことができる。
?sumデータフレーム(data frame)とは、Excelのワークシートのようにデータを表形式で保持するためのオブジェクトのこと。
Rでは基本的にデータフレームを使ってデータ分析を行うことになる。
df1 <- data.frame(class = c("B","A","A"),
english = c(79, 91, 89),
math = c(75, 81, 92))
df1 class english math
1 B 79 75
2 A 91 81
3 A 89 92
df[行番号,列番号]のように座標を指定して要素を取り出すことができる。
df1[1, ] # 1行目を表示 class english math
1 B 79 75
df1[ ,2] # 2列目を表示[1] 79 91 89
df1[2] # 2列目をデータフレームとして表示 english
1 79
2 91
3 89
df1[1:3, 1:3] # 1~3行の1~3列を表示 class english math
1 B 79 75
2 A 91 81
3 A 89 92
df1[c(1,3), c(1,3)] # 1,3行の1,3列を表示 class math
1 B 75
3 A 92
df["列名"]やdf$classのように列を指定することもできる
df1["class"] class
1 B
2 A
3 A
取り出したデータフレームの一部を別途代入し、新しいオブジェクト(数値、ベクトル、データフレーム)にすることもできる。
df <- df1[c("english","math")]
df english math
1 79 75
2 91 81
3 89 92
ベクトルの場合はmean()で平均値を計算できる
mean(1:6)[1] 3.5
colMeans()はデータフレームの各列に対して平均値の計算を行った結果を返す関数である。 (colSums()、rowSums()、rowMeans()なども存在する)
colMeans(df1[, -1]) # 1列目以外の各列(columns)に対する平均を表示 english math
86.33333 82.66667
ワーキングディレクトリとは、「作業を行うディレクトリ」のこと。 「現在開いているディレクトリ」ということで”current directory”とも呼ばれる。
csvやxlsxのデータを読み込む場合はファイルが存在する場所を指定する必要があるため、意識する必要がある。
(RStudio Cloudではあまり意識しなくてもよいが、クラウドでなく手元のパソコンの中でRStudioを使う際には重要になる)
# 現在開いているディレクトリを調べる(get working directory)
getwd()ワーキングディレクトリを設定するにはsetwd("作業したいディレクトリのパス")のように書く。
# set working directory
setwd(".")(なお、"."はUNIX系OSでワーキングディレクトリを指すのでsetwd(".")は何も変化を起こさない)
データの書き出しにはwrite.csv()関数を使う。
#データをcsvファイルに書き出す
write.csv(df1, "df1.csv", row.names = FALSE)なお、row.names = FALSEというオプションの引数(argument)は、行番号をcsvに含めずに保存することを指定するものである。(こうしないと行番号の列を含んだ状態でcsvが保存される)
データの読み込みにはread.csv()関数を使う。
#データをcsvファイルから読み込んでdf2という名前にする
df2 <- read.csv("df1.csv")文字列と似たデータ型で因子(factor)型というものがある。
# 因子(ファクター)
classes <- as.factor(df2$class)
classes[1] B A A
Levels: A B
str(classes) # str() = structure Factor w/ 2 levels "A","B": 2 1 1
str()というデータの内部構造を表示する関数を使うと、classesは因子型であり、値の水準(levels)が"A","B"の2つあり、内部的には2,1,1と数値で保持されていることがわかる。
as.factor()と同様にas.character()を使えば文字列型に戻すことができる。
str(as.character(classes)) chr [1:3] "B" "A" "A"
バージョン4.0.0より前のRではデータフレーム作成時(data.frame())やcsvの読み込み時(read.csv())には、文字列型のデータは因子型に自動的に変換する処理がdata.frame()やread.csv()の関数ではデフォルト設定となっていたため、不意に因子型に遭遇することがあった。もし古いRを使っていて自動変換を防ぎたい場合は、stringsAsFactors = FALSEという引数を追加して関数を実行すればよい。
df3 <- data.frame(class = c("B","A","A"),
english = c(79, 91, 89),
math = c(75, 81, 92),
stringsAsFactors = FALSE)
str(df3)'data.frame': 3 obs. of 3 variables:
$ class : chr "B" "A" "A"
$ english: num 79 91 89
$ math : num 75 81 92
Rでデータ分析を行うときは、基本的にベクトルとデータフレームを理解していればいい。
しかし、Rの世界も奥深いので、それらとも異なる形のデータと出会うこともある。本節ではそれらを紹介する。
リスト(list)はベクトルやデータフレームなど様々なオブジェクトをまとめることができる、非常に自由度が高いオブジェクトである。
リストの中にリストを内包するようなこともできる。
# リストの作成
list_ex <- list(vector = c("A", "B", "C"),
df = df1,
list = list(LETTERS, letters))
list_ex$vector
[1] "A" "B" "C"
$df
class english math
1 B 79 75
2 A 91 81
3 A 89 92
$list
$list[[1]]
[1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S"
[20] "T" "U" "V" "W" "X" "Y" "Z"
$list[[2]]
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s"
[20] "t" "u" "v" "w" "x" "y" "z"
要素に名前がついていればlist$要素名で参照できる
# リストの中のdfという要素(データフレーム)の取り出し
list_ex$df class english math
1 B 79 75
2 A 91 81
3 A 89 92
要素に名前がついていない場合、要素の番号(list[[i]])を指定して参照する
# リストの中のlistという要素(リスト)の第一要素([[1]])の取り出し
list_ex$list[[1]] [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S"
[20] "T" "U" "V" "W" "X" "Y" "Z"
行列(matrix)は、データフレームと非常に似ているものの、
という特徴を持つ。
行列は基本的にひとつのベクトルを用意して行数(nrow)や列数(ncol)を指定して作成する
# ベクトルから行列を作る場合
M <- matrix(data = c(1:6), nrow = 2, ncol = 3)
M [,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
as.matrix()関数でデータフレームを行列にすることもできる。
# データフレームの行列への変換
D <- as.matrix(df1[,2:3])
D english math
[1,] 79 75
[2,] 91 81
[3,] 89 92
行列同士であれば%*%という演算子を用いて行列同士の積を計算したりなど、様々な演算が可能になる。
M %*% D english math
[1,] 797 778
[2,] 1056 1026
本講義の演習はRで行うが、参考として、ここまで学んだ内容に対応するPythonのコードを簡単に紹介する。
Pythonにはベクトルやデータフレームが標準では備わっていないため、通常はNumPy(数値計算・配列)とpandas(データフレーム)という2つの外部ライブラリを使う。
import numpy as np
import pandas as pd計算や代入の書き方はRとほとんど同じ。ただし代入の記号は<-ではなく=を使う。
123 + 456x = 1 + 1 # オブジェクト x に 1+1の演算結果を代入
x # 中身を表示(スクリプト実行時はprint(x)が必要)Rのベクトルに相当するのは、Pythonの標準のリスト(list)や、NumPyの配列(array)である。要素ごとの計算(ベクトル演算)をしたい場合はNumPyの配列を使うのが一般的。
# NumPy配列(Rのc(1, 20, 100)に相当)
y = np.array([1, 20, 100])
y# 1~10の整数(Rの1:10に相当)
x = np.arange(1, 11)
xRと同様、1つの配列には基本的に1つのデータ型しか入らない(数値と文字列が混ざると全体が文字列型になる)。
要素の取り出しは[ ]を使うが、Pythonのインデックスは0始まりである点がRとの大きな違い(Rは1始まり)。
LETTERS = list("ABCDEFGHIJKLMNOPQRSTUVWXYZ")
LETTERS[0] # 最初の要素(Rの LETTERS[1] に相当)
LETTERS[0:3] # 1~3番目の要素(Rの LETTERS[1:3] に相当)
[LETTERS[i] for i in [0, 11, 22]] # 1,12,23番目の要素関数の呼び出し方自体はRとほぼ同じ。
sum(range(1, 101)) # 1~100の合計(Rのsum(1:100)に相当)
len(LETTERS) # 要素数(Rのlength()に相当)Rのデータフレームに相当するのはpandasのDataFrameである。列を辞書(dict)形式で指定して作成する。
df1 = pd.DataFrame({
"class": ["B", "A", "A"],
"english": [79, 91, 89],
"math": [75, 81, 92],
})
df1要素の取得には.iloc[](位置による指定)や.loc[](ラベルによる指定)、列名の指定を使う。
df1.iloc[0] # 1行目を表示(Rの df1[1, ] に相当)
df1.iloc[:, 1] # 2列目を表示(Rの df1[ ,2] に相当)
df1[["english", "math"]] # 複数列をデータフレームとして表示平均値の計算には.mean()メソッドを使う(RのcolMeans()に相当)。
df1[["english", "math"]].mean()pandasではto_csv()・read_csv()を使う(Rのwrite.csv()・read.csv()に相当)。
df1.to_csv("df1.csv", index=False) # 書き出し(index=FalseはRのrow.names=FALSEに相当)
df2 = pd.read_csv("df1.csv") # 読み込みRの因子(factor)型に相当するのは、pandasのcategory型である。
classes = df2["class"].astype("category")
classes
classes.cat.codes # 内部的な数値コード(Rのas.integer()に相当)Rのリストに近いものとしてPythonには辞書(dict)がある。また、Rの行列に相当するのは2次元のNumPy配列である。
list_ex = {
"vector": ["A", "B", "C"],
"df": df1,
"list": [LETTERS, [c.lower() for c in LETTERS]],
}
list_ex["df"] # 辞書のdfという要素の取り出し(Rの list_ex$df に相当)
list_ex["list"][0] # listという要素の第一要素(Rの list_ex$list[[1]] に相当)M = np.array([[1, 3, 5], [2, 4, 6]]) # Rのmatrix(1:6, nrow=2, ncol=3)に相当
D = df1[["english", "math"]].to_numpy() # データフレームをNumPy配列に変換
M @ D # 行列の積(Rの %*% に相当)