ベクトルの構造

ベクトルはRの基本的なデータ構造です。構造は配列に似ています。他のプログラミング言語の経験のある人は、配列を思い浮かべて下さい。

要素には順番があり、n番目のデータを操作するにはベクトルに[]を付けて、[n]のように、[]の中に番号を記述します。この番号を添字といいます。番号は数値だけでなく、変数や式を書く場合もあります。

> (1:10)[3]
[1] 3
> a <- c(1, 3, 6, 10, 15, 21, 28, 36, 45, 55)
> a[4]
[1] 10
> a[5] <- 100
> a
[1] 1 3 6 10 100 21 28 36 45 55

ベクトルの要素のデータ型は1つ

ベクトルの要素が持つことのできるデータ型(整数、数値、文字列、…)は1種類です。1つのベクトルに複数のデータ型を持たせることはできません。無理に持たせようとすると、以下のようなことが起きます。

> a <- 1:5
> a
[1] 1 2 3 4 5
> typeof(a)       # データ型を調べる関数
[1] "integer"
> a[3] <- "3"
> a
[1] "1" "2" "3" "4" "5"
> typeof(a)
[1] "character"
> a[3] <- 3
> a
[1] "1" "2" "3" "4" "5"

整数(integer)型のベクトルの一部に、文字(文字列)として"3"を代入すると、ベクトルのデータ型が文字列(character)型になってしまいます。再び、整数を代入しても戻りません。意図して、このような作用を利用することも考えられますが、プログラムが読みにくくなる場合があります。

> a <- 1:5
> a
[1] 1 2 3 4 5
> typeof(a)
[1] "integer"
> a[4] <- 4.0
> a
[1] 1 2 3 4 5
> typeof(a)
[1] "double"

整数型のベクトルの一部に、”4.0”を代入すると、実数(倍精度実数,double)型になります。どちらも数値なので、問題になることは少ないですし、データ型を変換する関数もありますが、丸め(切り捨て、切り上げ、四捨五入など)による誤差が問題となる場合もありますので注意しましょう。

プログラムするときには、例えば、関数の戻り値(関数の計算結果)が、操作するベクトルのデータ型とは異なる型と知らずに、ベクトルに加えてしまい、データ型が変わる…ような場合もありますので、注意しましょう。