データ型

R のオブジェクトは、type、mode および class の 3 種類の型が存在する。type は、データを保存できる変数のオブジェクトに対する型であり、ベクトル型、リスト型などがある。mode は、オブジェクトに格納されている要素に対する型であり、理論型、実数型、文字型、関数型などがある。また、class は、オブジェクトの属性に対する型であり、行列型、因子型、データフレーム型などがある。class が定義されていない場合は、mode または type の型を継承する。

データ型を調べる

あるオブジェクトに対して、type、mode および class を調べるにはそれぞれ typeofmode および class 関数を利用する。

x <- c(1.1, 2.2, 3.3, 4.4, 5.5)
typeof(x)
## [1] "double"

mode(x)
## [1] "numeric"

class(x)
## [1] "numeric"

データ型の判定

データ型の判定は、typeofmode および class 関数の出力結果を文字列比較して判定を行う方法と、is 系の関数を用いて判定を行う方法がある。

x <- c(1.1, 2.2, 3.3, 4.4, 5.5)

if (mode(x) == "numeric") {
    print("x is numeric.")
} else {
    print("x is not numeric.")
}
## [1] "x is numeric."

if (is.numeric(x)) {
    print("x is numeric.")
} else {
    print("x is not numeric.")
}
## [1] "x is numeric."

is 系の関数は、例えば以下のようなものがある。

関数意味
is.numeric実数であるかどうかを調べる
is.integer整数であるかどうかを調べる
is.complex複素数であるかどうかを調べる
is.character文字列であるかどうかを調べる
is.logical理論値であるかどうかを調べる
is.factor順序なし因子であるかどうかを調べる
is.ordered順序あり因子であるかどうかを調べる
is.function関数であるかどうかを調べる

データ型の変換

R のオブジェクトの型は交互変換が可能である。例えば、整数型を文字型に変更したり、データフレーム型を行列型に変換したりすることができる。

x <- c(1, 2, 3, 4, 5)

as.character(x)
## [1] "1" "2" "3" "4" "5"

d <- data.frame(x = c(1, 2, 3, 4, 5),
                y = c("a", "b", "c", "d", "e"))
as.matrix(d)
##      x   y
## [1,] "1" "a"
## [2,] "2" "b"
## [3,] "3" "c"
## [4,] "4" "d"
## [5,] "5" "e"

データの型を変換する関数は as 系の関数を利用する。as 系の関数は例えば以下のようなものがある。

関数意味
as.numeric実数に変換する
as.integer整数に変換する
as.complex複素数に変換する
as.character文字列に変換する
as.logical理論値に変換する
as.factor順序なし因子に変換する
as.ordered順序あり因子に変換する

References