19  ベクトル(長さが違うもの同士の計算)(L23)

ここからは、ベクトル同士の計算で要素の長さが違った場合について 考えていきましょう。

len_5 <- c(1,2,3,4,5)
len_10 <- c(10,20,30,40,50,60,70,80,90,100)

こんな風に、長さが5のベクトルと、10のベクトルがあった場合に、

len_5 + len_10 
 [1]  11  22  33  44  55  61  72  83  94 105

は、こんな結果でした。

[1] 11 22 33 44 55 61 72 83 94 105

この結果は


1   2   3   4   5   1   2   3   4   5  <-len_5が2回繰り返し
10  20  30  40  50  60  70  80  90  100 <-len_10が1回繰り返し

と、短い方を、複数繰り返して、その繰り返しとの計算が行われ結果になります

len_10 + len_5  
 [1]  11  22  33  44  55  61  72  83  94 105

ということで、順番をいれかてもお同じ結果になりますね。

じつは、一番最初の計算でご紹介した、ただの数字も、長さ1のベクトルだと考えれば、

len_5 + 1
[1] 2 3 4 5 6
1 + len_5
[1] 2 3 4 5 6

は、長さ1のベクトルが5回繰り返されたものという風に考えられます。


1 2 3 4 5   <- len_5 が1回
1 1 1 1 1   <- 1が5回繰り替えされている。

また、繰り返した結果、回数がぴったり丁度で終わらない場合も、一番長いベクトルが1回、それに帳尻を合わせるために、短いものが複数回繰り返されるとイメージできると良いです。(警告が出ますけどね)

len_3 <- c(1,2,3)
len_7 <- c(10,20,30,40,50,60,70)

len_3 + len_7
Warning in len_3 + len_7: longer object length is not a multiple of shorter
object length
[1] 11 22 33 41 52 63 71
len_7 + len_3
Warning in len_7 + len_3: longer object length is not a multiple of shorter
object length
[1] 11 22 33 41 52 63 71

-> 結果は、11 22 33 41 52 63 71

len_7の長さで7個の要素が結果に。


1  2  3  1  2  3  1  2  3  len_3が3回繰り返し
10 20 30 40 50 60 70       len_7が1回繰り返し

この場合、警告/Warningが表示されて、長さが違うと怒られていますが、計算は可能です。ただし、普段分析等を行っていて、このエラーがでることはなにかが間違っている可能性が高いので、自分が確信をもって、長さの違うベクトルを足し合わせた場合以外は問題が起こっていないかをチェックするほうがよいでしょう。

お疲れさまでした、以上、ベクトルの基本の基本の解説でした。