015-016 ベクトル(S2)
データの行と列
行方向と、列方向では、どちらのデータが「型」の予測がつきやすいでしよう?
ベクトル
- 数学のベクトルと違い、縦や横の概念はありません。しかし、「全て同じ型」である必要があるので、コラム方向でのイメージができると、後々役立ちます。
データフレーム
ベクトルの作成
#ベクトルをつくるには、「combine(くっつける)」の頭文字である、c()を使います。 #例: c(1,2,3,4,5) #ベクトルは変数に収納することもできます。 a <- c(1,2,3,4,5) a #文字列をいれてみましょう a <- c("あ","い","う","え","お") a <- c("1","2","3","4","5") #数字型と文字列型を同時にベクトルに入れる事は「できません」 #実験: a <- c(1,2,3,4,"あ") a # 文字列型が混ざっていると、環境画面でも表示されているように、 # a chr [1:5] "1" "2" "3" "4" "あ" # と、全て文字列型に置き換わってしまいます。
ベクトルの型変換と四則演算
#縦方向のカラムのイメージを持っていますか? a <- c(1,2,3,4,"あ") a + 10 #を実行したらどうなるでしょうか? #"1" + 2 を実行したらエラーが出るのと同じように、エラーです。 #数字へ変換しかた、覚えていますか? a <- as.numeric(a) # 環境画面で、a の横に、num [1:5] 1 2 3 4 5 # と表示されていますね。勝手に、全てのベクトル要素にas.numeric()が実行されました。 # 同様に、計算も、勝手に全ての要素に対して実行されます。 a + 10 # + は足し算 a * 5 # * はかけ算 a / 10 # / は割り算 a - 5 # - は引き算 a ** 2 # ** はXX乗 # 新しいベクトルを作ってみましょう b <- c(10,11,12,13,14) #これなら? a + b #そうです、同じベクトル同士は、同じ位置同士での四則演算が可能です。 a + b a * b a - b a / b a ** b
ベクトルの要素の長さが違う場合
#もし、ベクトル同士の計算で要素の長さが違ったら? len_5 <- c(1,2,3,4,5) len_10 <- c(10,20,30,40,50,60,70,80,90,100) len_5 + len_10 #これは、 # 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のベクトルだと考えれば、 len_5 + 1 1 + len_5 #も、長さ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 len_7 + len_3 # -> 結果は、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)メッセージは、 #In len_3 + len_7 : # longer object length is not a multiple of shorter object length #longer object length:長い方のベクトルの要素数(長さ、kength)が、 #is not a multiple: 複数倍ではない(何に対して?) #of shorter object length: 短い方のベクトルの要素数(長さ、length)が。
ベクトルのまとめ
- ベクトルを作るには、c()を使う。
- ベクトルは変数に収納可能。
- ベクトルの要素は全て同じ型になる。
- ベクトル同士の計算は同じ位置同士で「普通」に計算される。
- ベクトル同士の長さが違うと、帳尻を合わせてくれるが、警告される。