R のオブジェクトは、type、mode および class の 3 種類の型が存在する。type は、データを保存できる変数のオブジェクトに対する型であり、ベクトル型、リスト型などがある。mode は、オブジェクトに格納されている要素に対する型であり、理論型、実数型、文字型、関数型などがある。また、class は、オブジェクトの属性に対する型であり、行列型、因子型、データフレーム型などがある。class が定義されていない場合は、mode または type の型を継承する。
データ型を調べる
あるオブジェクトに対して、type、mode および class を調べるにはそれぞれ typeof
、mode
および 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"
データ型の判定
データ型の判定は、typeof
、mode
および 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
- R の「型」について. 2013.
- Mode, Class and Type of R objects. 2010.