多次元配列(行列)の構築

R 言語で多次元配列(行列)を構築する方法について。

配列の構築と要素の参照

配列(array)は、複数の添字を持つデータ集合です。添字を k 個持つ配列は、k 次元配列(k-dimensional array)と呼ばれます。特に 2 次元配列は、行列(matrix)を記述します。


配列を構築する基本的な方法は、ベクトルに次元ベクトル(dimension vectorを設定することです。例えば 2x3 行列を構築するためには、

> v <- 1:6          # 2x3 (=6) 要素を持つベクトルを構築
> v                 # この時点では単なる 2x3 (=6) 要素のベクトル
[1] 1 2 3 4 5 6
> dim(v) <- c(2,3)  # 構築したベクトルに、次元ベクトルを設定
> v                 # すると、2x3 行列になる
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6
> dim(v)            # 次元の確認
[1] 2 3

なお、配列の要素は列優先順序(column-major order)になります。


配列の添字は、ブラケット(角カッコ)内にカンマ区切りで指定します。このとき添字に何も書かないと、全部を取ってきます。

> v[1,2]    # 1 行、2 列
[1] 3
> v[1,1:2]  # 1 行、1-2 列
[1] 1 3
> v[1,]     # 1 行、全列
[1] 1 3 5
> v[,2]     # 全行、2 列
[1] 3 4

なお、ブラケット内にカンマが含まれていないと、配列の元になっているベクトルの要素へアクセスします。

> v[3]       # 元のベクトルの 3 番目の要素
[1] 3
> v[2:5]     # 元のベクトルの 2-5 番目の要素
[1] 2 3 4 5

array() 関数

array() 関数を使うと、簡単に配列を構築できます。この関数の dim 引数に、次元ベクトルを指定します。例えば 2x3 行列を構築する場合は、

> array(1:6, dim=c(2,3))
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6

また array() 関数は、元となるベクトルの要素数が足りない場合に recycle します。例えば

> array(1:2, dim=c(2,3))
     [,1] [,2] [,3]
[1,]    1    1    1
[2,]    2    2    2

diag() 関数

対角行列を構築する場合には、diag() 関数を用いると簡単に構築できます。
diag() 関数は、引数に渡されたベクトルを対角成分に持つ行列を構築します。例えば

> diag(1:3)
     [,1] [,2] [,3]
[1,]    1    0    0
[2,]    0    2    0
[3,]    0    0    3

また、nrow オプションによって行数、ncol オプションによって列数を指定できます。ncol オプションが指定されていない場合には、正方行列が構築されます。

> diag(1:3, nrow=3, ncol=4)
     [,1] [,2] [,3] [,4]
[1,]    1    0    0    0
[2,]    0    2    0    0
[3,]    0    0    3    0
> diag(2, nrow=3)
     [,1] [,2] [,3]
[1,]    2    0    0
[2,]    0    2    0
[3,]    0    0    2

なお、diag() 関数に行列を渡すと、その対角成分が返されます。

> diag(array(1:9, dim=c(3,3)))
[1] 1 5 9