<< 目次へ
最終更新日: 2010.8.15
ベクトル
ベクトルというのは数値が集合したものと考えればよいでしょう。今までは変数の中に1つの数値を代入していましたが、複数個代入することもできます。そのためにc()という関数を用いて次のように記述します。数値と数値はカンマ , で区切り、文字列はかならずダブルクォーテーション "" でくくることを忘れないでください。
> dat <- c(12, 21, 34, 43) > dat [1] 12 21 34 43 > typeof(dat) [1] "double" > moji <- c("A", "B", "C") > moji [1] "A" "B" "C" > typeof(moji) [1] "character"
気をつけるべきことは1つの変数の中に数値(numeric)と文字列(character)を混在させることはできないということです。基本的にコンピュータ上で数値データを文字データとして認識することはできますが、文字データを数値データとして認識することはできません。したがって、両者を混在させるようなコードを記述しても、優先的に文字列として扱われてしまいます。無理やりas.numeric()を使って数値データに変換しようとすると、文字列は強制的にNA(欠損値)として置き換えられることになります。
> mix <- c(1, "A", "B", 2) # 数値と文字を混在させようとしても、 > mix # 中身を確認してみると文字として扱われている。 [1] "1" "A" "B" "2" > typeof(mix) # 型を確認するとやはりcharacterである [1] "character" > mix2 <- as.numeric(mix) # 無理やりnumeric型として再定義してみると・・・ 警告メッセージ: 強制変換により NA が生成されました > mix2 # NAに置換されていることが確認できる [1] 1 NA NA 2
Rはベクトルの扱いが非常に強力(便利)なので、色々な使い方ができます。例えばベクトルの長さをlength()を使って調べることができます。あるいは[ ]を用いて任意の添字番号を指定して、その要素を抽出することもできます(実はこの大カッコ [ ] も関数なのです)。
> length(dat) # ベクトルの長さ(要素数)を取得 [1] 4 > dat[1] # 第1要素を抽出 [1] 12 > dat[c(1, 4)] # 第1要素と第4要素を抽出 [1] 12 43 > dat[5] # 1〜4以外の要素番号を指定してもNAとなる [1] NA
また任意の要素を新たに置き換えることもできます。
> dat # datの中身を確認 [1] 12 21 34 43 > dat[1] <- 1 # 第1要素に新たに1を代入する > dat # 改めて中身を確認してみると、第1要素の値が置き換えられている。 [1] 1 21 34 43 > dat[3:4] <- 1:2 # 第3要素から第4要素までを、1から2に置き換える > dat [1] 1 21 1 2
ここで新たにコロン : が登場しましたが、これは非常に便利なものなのでぜひ覚えておきましょう。意味としてa:bは「aからbまで等間隔(1ずつ)の値を生成する」ということです(知っている人は「初項a、公差1の等差数列」といえば分かるでしょう)。よく意味が分からないでしょうから、実際にいくつかの例を示しましょう。
> 1:5 # 初項1、公差1の等差数列 [1] 1 2 3 4 5 > 9:-3 # 初項9、公差1(-1)の等差数列 [1] 9 8 7 6 5 4 3 2 1 0 -1 -2 -3 > 0.3:4 # 初項0.3、公差1の等差数列 [1] 0.3 1.3 2.3 3.3