14. ベクトル計算


ベクトル同士の計算

同じ長さ同士のベクトルの演算 (算術演算,論理演算,比較演算) は,対応する各要素の演算となる.すなわち,普通の数字と同様に + (加算),- (減算), * (積), / (商), %/% (整数商),%% (剰余),^ (べき乗) が行える.

 
 c(1, 2, 3) + c(4, 5, 6)                    # c(1+4, 2+5, 3+6)

[1] 5 7 9

 c(1.0, 2.0) * c(3.0, 4.0)                  # c(1*3, 2*4)

[1] 3 8

ベクトルの長さが違う場合は短い方のベクトルの要素が循環して使用される.このことを利用して,ベクトルの全ての要素に同じ処理を施すことも出来る(以下に例示する).

 
 c(6.0, 5.0, 4.0, 3.0) - c(2.0, 1.0)        # c(6-2, 5-1, 4-2, 3-1) と同じ

[1] 4 4 2 2

 c(1.0, 2.0, 3.0, 4.0, 5.0) - 1             # 全ての要素から 1 を引く

[1] 0 1 2 3 4

 1 / 2:5                                    # それぞれの要素の逆数

[1] 0.5000000 0.3333333 0.2500000 0.2000000

ベクトル同士を比較演算子 < ,== ,> などによって比較することも出来る.算術演算の場合と同様,これらの演算子はベクトルとベクトルの対応する要素同士を比較して,後述する論理型ベクトルを結果として返すことになる.

 
 c(1, 20, 300, 4, 50) == c(1, 2, 3, 4, 5)   # 1 == 1, 20 == 2, 30  == 3  ...

[1]  TRUE FALSE FALSE  TRUE FALSE

 c(1, 20, 300, 4, 50) > 60                  # 1 > 60, 20 > 60, 300 >  60 ...

[1] FALSE FALSE  TRUE FALSE FALSE

ベクトル用の関数

この節 で紹介した数学関数をベクトルに適用すれば,各要素毎に関数が適用されて結果が表示される.

 
 sqrt(1:5)

[1] 1.000000 1.414214 1.732051 2.000000 2.236068

また,数値を要素に持つベクトルの各要素に対して演算を行なう関数には以下のようなものがある.また,基本的な計算の説でも紹介した関数 (sqrt() や cos() など) を適用することで,項別に関数を適用することも出来る.ただし,ベクトルの要素に一つでも NA があると結果も NA になるものもあるので注意しなければならない.

記号

 sum()

 mean()

 var()

 median()

 cor()

 max()

 min()

意味

 総和

 平均

 不偏分散

 中央値

 相関係数

 最大値

 最小値

 

記号

 prod()

 cumsum()

 sd()

 sort()

 rev()

 pmax()

 pmin()

意味

 総積

 累積和

 標準偏差

 昇順整列

 要素を逆順

 並列最大値

 並列最小値

 

記号

 range()

 match()

 diff()

 rank() 

 order()

意味

 範囲

 マッチング

 前進差分

 整列した各要素の順位 

 整列した各要素の元の位置 

まず,一つのベクトルを使った計算例を示す.

 
 x <- 1:5
 rev(x)                               # x の要素を逆順にする

[1] 5 4 3 2 1

 y <- cumsum(x)                       # y に x の累積和を代入
 mean(y)                              # y の平均を求める

[1] 7

 mean(y, 0.5)                         # y の小さい方と大きい方を合わせて 100*0.5%=50% を除いた平均(trimmed mean)

[1] 6

関数 cumsum() の亜種について,数列の部分和・積、そして部分最大・最小値からなる数列を計算する関数がそれぞれ cumsum() , cumprod(), cummax(), cummin() と用意されている.

次に,複数のベクトルを使った計算例を示す.

 
 y <- c(0, 1, 3, 6, 10);
 sort(y)                                # y を整列する

[1]  0  1  3  6 10

 order(y)                               # y を整列したときの各要素の元の位置

[1] 1 2 3 4 5

 rank(y)                                # y を整列したときの各要素の順位

[1] 1 2 3 4 5

 z <- c(100, 20, 4, 2, 1)
 pmax(x, y, z)                          # x, y, z の各要素を比較して一番大きいものを順に返す

[1] 100  20   4   6  10

 pmin(x, y, z)                          # x, y, z の各要素を比較して一番小さいものを順に返す

[1] 0 1 3 2 1

ベクトルを用いた集合演算

ベクトルを集合と見立てて集合演算を行うことも出来る.まず,集合演算用の関数を紹介する.

コマンド

説明

union(x, y)

和集合

intersect(x, y)

積集合

setdiff(x, y)

差集合

setequal(x, y)

集合として等しいか否か

is.element(x, y)

x 中の各要素は集合 y に含まれるか否か( x %in% y でも可)

次に,計算例を示す.

 
 x <- 1:5;  y <- 1:4
 intersect(x, y)                   # 積集合

[1] 1 2 3 4

 setequal(x, y)                    # 集合として等しいか否か

[1] FALSE

 is.element(x, y)                  # x 中の各要素は集合 y に含まれるか否か

[1]  TRUE  TRUE  TRUE  TRUE FALSE