多次元配列(行列)の構築
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