行列(ベクトル)の操作

反復, 繰り返しなどでベクトルを作る

c(オブジェクトの並び) オブジェクトの並びを内容とするベクトルを生成する。
例) c(2,3,5) は 2, 3, 5 を要素とする長さ3のベクトル。
seq(初項, 末項, 公差) 等差数列ベクトルを生成する。
: 公差1の等差数列ベクトルを生成する。
例) 1:5 c(1,2,3,4,5) に等しい。
rep(x, 回数) xを回数だけ繰り返すベクトルを生成する。
例) rep(c(1,2),3) c(1,2,1,2,1,2) に等しい。
例) rep(c(1,2),c(3,3)) c(1,1,1,2,2,2)に等しい。 回数がxと同じ長さベクトルの時には、 x の各要素のそれぞれを対応する回数複製する。
append(x, values, after=length(x)) ベクトルの要素の追加
replace(x, list, values) ベクトルの要素の置き換え

データを行列形式にする

matrix(data, nrow=n, ncol=m) dataの要素を 大きさ nxm の行列とする。
(defaultでは、data[1]が[1,1]要素, data[2]が[2,1]要素,...となる。 つまり、fortran流の前が早く回る添字順)
注: nrow, ncol の一方を指定すれば、他方は適当に定められる。 dataが長さが nxm に満たないときには data を巡回的に用いる。
array(data, dim=c(各次元の大きさ)) データをdimに与えた次元の配列(多次元行列)とする。
例) array(data, dim=c(2,3,5)) は data を2x3x5の3次元配列とする。
注、このとき、左の添字が先に変化する順序で格納される。
cbind( ... )
rbind( ... )
... のベクトル(行列)を列として並べた行列
... のベクトル(行列)を行として並べた行列
t( 行列 ) その行列の転置行列
aperm( 配列, perm ) その配列のpermによる軸の置換
diag( x ) x:行列ならその対角要素を要素としたベクトル
x:ベクトルならそれを対角要素とした対角行列
x:スカラーなら大きさxの単位行列

データの部分抽出

配列[引数] "引数"の内容を各次元の添字とした配列の要素(/部分配列)次表を参照
リスト[[引数]] リストの成分を選ぶ 例) mylist[[2]]
リスト$成分名 リストの成分名で選ぶ 例) mylist$stuff
Splusでのマニュアルでの説明

部分抽出の際の、要素指定の引数の値の意味

論理数 真(T)の抽出と選択 例) x[c(T,F,F,T)], x[x>3]
正の数 抽出と選択 例) x[c(1,3,5,9)]
負の数 指定要素の削除 例) x[-c(2,4)]
外れ値,欠損値 NAを使用
例) x:ベクトル、y:2次元行列として
x[3], y[3,4] : 単一の要素
y[3,4] <- 3 : y の (3,4)要素に 3 を代入する。
y[3:5,1:4] : 部分行列
y[,4] : y の第4列
x[-3] : x[3] 以外の x の要素のベクトル
x[x>3] : x>3なる条件を満たす要素
x[x!=0] : 0でない要素(次表参照)
x[order(x)] : x を x の値の昇順に整列したベクトル

例) M:論理値行列として、(たとえば、M _ matrix(c(T,F,F,F,T,T),nc=2)
cbind(row(M)[M], col(M)[M]) : 行列要素が T であるところの行番号と列番号

行列の属性検査

dim( x ) 配列x の次元の大きさベクトルを返す
ncol( x ) 行列xの列数
nrow( x ) 行列xの行数

行列に対する基本演算

lower.tri( x ) 行列xの下三角部分が真のxと同じ大きさの論理値行列
col( x ) 行列xの列番号を要素とするxと同じ大きさの行列
row( x ) 行列xの行番号を要素とするxと同じ大きさの行列
slice.index( x, MARGIN ) 配列xの第MARGIN次元の番号を要素とするxと同じ大きさの配列
例:x <- array(runif(24),c(2,3,4)); split(x,slice.index(x,3)))
x の 第3次元で x の要素を層別した結果(リスト)
x %*% y 行列の積の結果を返す。 x, yがベクトル同士の場合には、t(x) %*% y に等しくなる
x %c% y 行列のクロス積の結果を返す。 x %c% y == t(x) %*% y
outer( x, y, FUN ) FUNによる(一般化)外積結果の配列を返す。
次元数はc(dim(as.array(x)),dim(as.array(x)))、 配列の第[i,j,....,a,b,...]要素の値は FUN(x[i,j,....],y[a,b,...])となる。
x %o% y (普通の)外積結果の配列を返す。 outer( x, y, FUN="*" ) に同じ

データ集約も参照の事。 一般の数学では行列(ベクトル)用でない演算子/関数を、 行列(ベクトル)に適用した場合、普通は 要素ごと個別にその演算を行うことと解釈され、実行される。

> x <- matrix(1:6,nrow=2)
> x
     [,1] [,2] [,3] 
[1,]    1    3    5
[2,]    2    4    6

> x + x             # 行列同士の和は "+" 記号で出来る。
     [,1] [,2] [,3] 
[1,]    2    6   10
[2,]    4    8   12

> sqrt(x)
         [,1]     [,2]     [,3] 
[1,] 1.000000 1.732051 2.236068
[2,] 1.414214 2.000000 2.449490

> x-1
     [,1] [,2] [,3] 
[1,]    0    2    4
[2,]    1    3    5

行列の演算

eigen( 実正方行列 ) 実行列の固有値と固有ベクトルを求める
svd( 行列 ) 行列 x の特異値分解 list(u,d,v) を求める。 x = u %*% diag(d) %*% t(v)
qr( 実数行列 ) 実数行列のQR分解を求める
qr( 非負定符号の対称行列 ) 行列のコレスキー分解を求める
solve( 実正方行列 ) 線形方程式を解く ( 逆行列を求める )