1.3 データ構造(2)配列と行列

ベクトルに次元属性を与えることにより、配列として扱えるようになります。

x <- 1:9
x
## [1] 1 2 3 4 5 6 7 8 9
# xを3x3の2次元配列(行列)として扱う
dim(x) <- c(3, 3)
attributes(x)
## $dim
## [1] 3 3
x
##      [,1] [,2] [,3]
## [1,]    1    4    7
## [2,]    2    5    8
## [3,]    3    6    9
x3 <- 1:27
# x3を3x3x3の3次元配列として扱う
dim(x3) <- c(3, 3, 3)
x3
## , , 1
## 
##      [,1] [,2] [,3]
## [1,]    1    4    7
## [2,]    2    5    8
## [3,]    3    6    9
## 
## , , 2
## 
##      [,1] [,2] [,3]
## [1,]   10   13   16
## [2,]   11   14   17
## [3,]   12   15   18
## 
## , , 3
## 
##      [,1] [,2] [,3]
## [1,]   19   22   25
## [2,]   20   23   26
## [3,]   21   24   27

dim()関数により次元属性が与えられ、引数には各次元の要素数を指定します。配列の各要素は、各次元の要素番号を指定しても、ベクトルとしての要素番号を指定しても参照できます。

x3[1, 2, 1]
## [1] 4
x3[4]
## [1] 4

特に2次元配列である行列を作成する場合には、matrix()関数を使うことができます。

matrix(1:15, ncol = 5, byrow = TRUE)
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    2    3    4    5
## [2,]    6    7    8    9   10
## [3,]   11   12   13   14   15

最初の引数でベクトルを指定しますncolは行列の列数、byrowは行方向にベクトルの要素を並べるかどうかをTRUEFALSEで指定します(デフォルトはFALSE)。