<< トップページへ

<< 目次へ

最終更新日: 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