オブジェクト型

R はデータをベクトルとして取り扱っている。細かく見ていくと、ベクトルの各要素は実数、文字列などのデータ型からなる。逆に、複数のベクトルを縦または横に並べると「行列」となる。複数の行列を積み上げると、三次元の「配列」ができる。このように、R はベクトル、行列や配列などの型(オブジェクト型)が用意されている。

オブジェクト型 
ベクトル型もっとも基本的なオブジェクト型。ベクトルを構成する各要素は実数であったり、文字列であったりする。
行列型長さが等しい複数のベクトルを束ねてできるオブジェクト型。数学における行列と同様に、行と列からなる 2 次元配置ととる。
データフレーム型行列型と同様に 2 次元配置である。取扱い方も行列型とほぼ同じ。ファイルからデータを読み込むとき、データフレーム型として読み込まれる。
配列型行列は 2 次元配置であるが、配列を利用することで、3 次元以上の配置を作り出せる。
リスト型なんでも保存できるマジックボックスのようなオブジェクト型。他のプログラミング言語におけるハッシュ(ディクショナリー、マップ)のように扱える。

ベクトル型

ベクトルを生成するとき c 関数あるいは vector 関数を利用する。(詳細

x <- c(1,2,3,4)         # 1 2 3 4
y <- c()                # NULL

u <- vector()           # logical(0)
v <- vector(length=3)   # FALSE FALSE FALSE

等差数列や循環数列などを生成するとき repseq などの関数を利用する。

rep(1, times = 5)
## [1] 1 1 1 1 1

rep(c(1,3,5), times = 5)
##  [1] 1 3 5 1 3 5 1 3 5 1 3 5 1 3 5

rep(c(1,3,5), length = 5)
## [1] 1 3 5 1 3

seq(1, 10, by = 2)
## [1] 1 3 5 7 9

行列型

行列型のオブジェクトを生成するとき matrix 関数を利用する。この際に、行数または列数を指定する。また、複数の行列、ベクトルを束ねて新しい行列を生成することもできる。列を束ねるときは cbind、行を束ねるときは rbind を利用する。(詳細

x <- matrix(0, nrow = 2, ncol = 4)
x
##      [,1] [,2] [,3] [,4]
## [1,]    0    0    0    0
## [2,]    0    0    0    0


y <- matrix(1:12, nrow = 3, ncol = 4)
y
##      [,1] [,2] [,3] [,4]
## [1,]    1    4    7   10
## [2,]    2    5    8   11
## [3,]    3    6    9   12


x <- cbind(x, c(5, 5))           # 列の追加(各列を束ねる)
x
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    0    0    0    0    5
## [2,]    0    0    0    0    5


x <- rbind(x, c(3, 3, 3, 3, 3))  # 行の追加(各行を束ねる)
x
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    0    0    0    0    5
## [2,]    0    0    0    0    5
## [3,]    3    3    3    3    3

データフレーム型

データフレーム型は列ベクトルを横に並べたデータ型である。データフレームを作成するときも、一列ずつにデータを作成する。列または行の追加は、cbind または rbind を利用する。行列型は行または列の両方を柔軟に取り扱えるのに対し、データフレーム型は特に列の取り扱いに優れている。(詳細

x <- data.frame(FDR = c(0.1, 0.2, 0.3), AUC = c(0.8, 0.7, 0.6))
x
##   FDR AUC
## 1 0.1 0.8
## 2 0.2 0.7
## 3 0.3 0.6

x$FDR                   # 列名で要素を取得
## [1] 0.1 0.2 0.3

x[,1]                   # 列番号で要素を取得
## [1] 0.1 0.2 0.3

x$FDR[2]                # 列名と行番号で要素を取得
## [1] 0.2

x <- rbind(x, c(0.5, 0.7))                   # 行の追加
x
##   FDR AUC
## 1 0.1 0.8
## 2 0.2 0.7
## 3 0.3 0.6
## 4 0.5 0.7

x <- cbind(x, TN=c(0.6, 0.4, 0.2, 0.5))      # 列の追加
x
##   FDR AUC  TN
## 1 0.1 0.8 0.6
## 2 0.2 0.7 0.4
## 3 0.3 0.6 0.2
## 4 0.5 0.7 0.5

データフレーム型と行列型はともに 2 次元配置であるため、交互変換ができる。

x1 <- matrix(1:8, ncol = 4, nrow = 2)
x2 <- as.data.frame(x1)
x3 <- data.frame(x1)

y1 <- data.frame(A = c(1, 1), B = c(2, 2), C = c(3, 3))
y2 <- as.matrix(y1)

リスト型

行列型に代入できるベクトルはすべて同じ長さでなければならない。ベクトルを構成する要素はすべて数値か、文字列かで統一されている必要がある。また、ベクトルのある要素に行列を代入することも不可能である。

これらに対して、リスト型はこれらを可能にする。リストの 1 番目の要素に数値ベクトルを代入し、2 番目の要素に行列を代入し、3 番目の要素に文字列を代入したりすることができる。取り扱いが便利なうえ、計算速度が遅い。(詳細

x <- matrix(1:8, ncol = 4, nrow = 2)
y <- c(1:10)
z <- list(x, y)
z
## [[1]]
##      [,1] [,2] [,3] [,4]
## [1,]    1    3    5    7
## [2,]    2    4    6    8

## [[2]]
##  [1]  1  2  3  4  5  6  7  8  9 10


z[[2]]   # リスト要素へのアクセス
##  [1]  1  2  3  4  5  6  7  8  9 10


#リストに名前をつける。
z <- list(mat = x, vec = y)
z$y      # リスト要素へのアクセス
##  [1]  1  2  3  4  5  6  7  8  9 10