「ベクトルと代入」の編集履歴(バックアップ)一覧に戻る

ベクトルと代入 - (2008/08/08 (金) 19:46:15) の編集履歴(バックアップ)



ベクトルの生成

Rではデータを「ベクトル」として扱います.ベクトルというと例の矢印を思い浮かべるかもしれませんが,ここではもっと一般的な形のベクトルを指しています.複数の数字などを並べたモノだと思ってもらえれば結構です.実数や複素数といった数値のほか,文字列,TRUE・FALSEで表される論理値などもベクトルとして取り扱われます.

ともあれ,ベクトルを作ってみましょう.ベクトルはc()という関数で生成されます.
> c(1,2,3)
[1] 1 2 3
(ここで行頭の「>」は入力する必要はありません.コンソールの左端に最初から出ているヤツです.「>」が付いているのは入力,付いていないのは出力と解釈してください.)

このように,ベクトルにしたい個々の要素を半角カンマ「,」で区切って並べるとベクトルができます.

ここで[1]というのはその列の最初の数字がベクトルの1つ目の要素であることを示しています.今は大して有り難味がありませんが,ベクトルがもっと長くなって全ての要素の表示に改行が必要になったとき役に立つことがあるでしょう.

また,公差1の等差数列(例えば,[1, 2, 3, 4, 5, ...])を要素に持つベクトルは関数[:]で簡単に作成できます.この関数は少々使い方が特殊ですが,例を見ればすぐに理解できるでしょう.
>1:10
[1]  1  2  3  4  5  6  7  8  9 10
>10:1
[1] 10  9  8  7  6  5  4  3  2  1
1から1つずつ値を増やすベクトルというのはデータに番号を振ったり繰り返し処理のときの回数を数えたりと使い道が多いので覚えておいてください.

文字列や論理型のベクトルの作り方も同様です.文字列のベクトルを作るときは半角ダブルクオーテーション「"」で括るのを忘れないでください.括らなかった場合,次に説明する「変数」であると解釈されてしまいます.
> c("cat", "dog", "人間")
[1] "cat"  "dog"  "人間"
> c(T, F, TRUE, FALSE)
[1]  TRUE FALSE  TRUE FALSE
Rではベクトルのほかにもっと複雑なデータの並び方をした配列やデータフレームなどもありますが,基本はベクトルです.データフレームなどもバラせばベクトルになります.これらは必要になったときに改めて解説します.

変数と代入

ベクトルの作り方はわかりました.しかしベクトルを作ってみても現時点ではコンソールに表示して終了です.これでは面白くありません.せっかく作ったベクトルをどこかへ一時的に保管しておきたいところです.

そこで使われるのが「変数」です.変数には小さなものから大きなものまでわりと何でもしまうことが可能です.変数への収納の仕方はこうです.
x <- 1:10
ここで変数は「x」で,半角の記号2つで作った矢印「<-」によって「xのなかに『1:10』という関数によって作られるベクトルを入れておいてくれ」という命令をしているわけです.この操作を「代入」と言います.Rでは,代入操作によって変数が作られます.何も言わずにいきなり代入をしてしまって大丈夫です.あらかじめ「xという箱を用意しておいてくれ」とか命令する必要はありません.矢印の方向を逆にして,
1:10 -> x
などとしても大丈夫です.

変数はその名前を打ち込むことで呼び出すことができます.
> x <- 1:10
> x
 [1]  1  2  3  4  5  6  7  8  9 10

ベクトルを用いた計算

ベクトルに対して各種の演算を施すことができます.基本的には要素同士の計算になります.
> x <- 1:10
> y <- 11:20
> x
 [1]  1  2  3  4  5  6  7  8  9 10
> y
 [1] 11 12 13 14 15 16 17 18 19 20
> x+y
 [1] 12 14 16 18 20 22 24 26 28 30
通常の行列計算と異なり,掛け算,割り算も要素同士の計算になります.また,長さが異なっていても計算は可能です.その場合,要素の少ないベクトルが循環して使用されます.要素の多いベクトルの長さ(要素数)が要素の少ないベクトルの長さの整数倍でない場合はエラーが出ますが,一応計算結果は返ってきます.
> x <- rep(1,10)
> y <- 1:3
> x
[1] 1 1 1 1 1 1 1 1 1 1
> y
[1] 1 2 3
 > x*y
 x * y 中で警告がありました: 
  長いオブジェクトの長さが短いオブジェクトの長さの倍数になっていません  
[1] 1 2 3 1 2 3 1 2 3 1
ここで使ったrep()関数は引数を2つ使う関数で,1つ目の引数を2つ目の引数の回数だけ繰り返したベクトルを生成します.上の例では1を10個持ったベクトルを作ったわけです.