<< トップページへ

<< 目次へ

最終更新日: 2010.8.15

変数の型



 少し面倒な話ですが変数の型について説明しておきましょう。本来、プログラミングでは使用する変数を宣言しておかないと使うことができないのですが、Rではそうする必要がありませんので、ここでの知識は必要ないといえば必要のないものなのです。しかし将来的に他の言語を使用してみたり、Rをより高度に使いこなそうとしたときに必要な知識なので説明しておこうというわけです。

 そもそも変数(オブジェクト)を器として考えたとき、器には種類があって、その種類に適合したモノでないと格納しておくことができないのです。例えば紙袋に水を入れることはできないので(破れてしまいます)ペットボトルに入れたほうが適切でしょう、ということです。基本的にどのプログラミング言語でも、単に数値といっても整数型(integer)と倍精度浮動小数点型(double)とに区別されています。簡単にいえば整数と小数を区別しているということです。ただRではnumericといって、両者を込みにして扱える型あるので、通常時に両者を区別して考える必要はありません。

> a <- 314     # 整数値を代入して、
> typeof(a)    #  その型を調べてみるとdoubleである。
[1] "double"

> b <- 3.14    # 今度は小数値を代入して、
> typeof(b)    #  その型を調べてみるとdoubleである。
[1] "double"

> int.a <- as.integer(314)    # 同じ整数値314をintegerとして代入し、
> typeof(int.a)               #  また型を調べてみるとintegerである。
[1] "integer"

> int.b <- as.integer(3.14)   # 小数値をintegerとして代入してしまうと、
> int.b                       #  小数点部分が切り捨てられてしまう。
[1] 3

 基本的にはある変数に整数値を代入しようと、小数点を含む値を代入しようと、ユーザー自身が何も指定しなければR側が勝手にnumeric型(の中でも特にdouble型)として扱います。上記の例ではオブジェクトaも、int.aも数値としては同じ314という値が代入されていますが、コンピュータのメモリ上での扱いは異なります。aはdouble型として扱われるのに対し、int.aはinteger型として扱われます。しかし、このようなことは多くの場合において(一般的なユーザーとして使う場合において)気にする必要はありません。ただ気に留めておくべきことは、小数点を含む値をintegerとして扱うと小数点以下が切り捨てられてしまうということです。

 Rの特殊な(特徴的な)型としてfactorがあります。これは水準(level)という情報を有したものであり、例えば以下のようなものです。しかし、これについては後ほど詳しく説明するので、現段階ではこうした型もあるのだということだけ気に留めておいてください。

> sex <- c("male", "female")  # 男性と女性という文字列を代入
> sex
[1] "male"   "female"
> typeof(sex)                 # 型を調べるとcharacterである
[1] "character"

> sex2 <- as.factor(sex)      # factor型として再定義する
> sex2                        # 中身を確認すると水準という情報が付加されている
[1] male   female
Levels: female male
> typeof(sex2)                # 型を調べるとintegerである
[1] "integer"