Rはオブジェクトで計算処理を実現しますが、数値以外には文字や因子を持ちます。
- 数値
数字からなるオブジェクトで四則演算などの算術処理が可能です。数値の大小で順位を持ちます。
> x <- sample(20,4)#sampple関数は1~10の整数から疑似乱数にしたがって4つ選ぶ > y <- sample(20,4) > x;y [1] 6 16 2 11 [1] 3 14 15 1 > x + y#四則演算できる [1] 15 16 22 33 > sort(x)#数値の大小で順序が決まる [1] 9 30 17 12
- 文字
文字からなるオブジェクトです。四則演算はできません。順序はコード順で決まります。
> x <- as.character(x)#as.characterは文字列に変換する関数 > y <- as.character(y) > x;y#“(ダブルクオート)が付いて文字列になったことが分かります。 [1] "6" "16" "2" "11" [1] "3" "14" "15" "1" > x + y 以下にエラー x + y : 二項演算子の引数が数値ではありません #文字列になったので四則演算をできません。 > sort(x) [1] "11" "16" "2" "6" #数値とは違って、10は1と0の文字になり、1は2より前なので、11が2よりに前なります。
- 因子
順序変数に相当するものです。数値や文字の順序を指定でき、それぞれに数値の順序が付与されます。
> factor(x) [1] 6 16 2 11 Levels: 11 16 2 6 > str(factor(x)) Factor w/ 4 levels "11","16","2",..: 4 2 3 1 > levels(factor(x)) [1] "11" "16" "2" "6" > labels(factor(x)) [1] "1" "2" "3" "4"
因子は数値や文字と違って、levelとlabelを持ちます。
levelは各因子の大小関係を示し、labelは各因子に相当するラベルになります。
上の例は、オブジェクトxが既に文字列になっているので、大乗関係が 11 -> 16 -> 2 -> 6 です。
つまり、11が1、16が2、2が3、6が4というラベルが付与されているので、変換の仕方で結果が変わります。
> as.numeric(factor(x)) [1] 4 2 3 1 > as.character(factor(x)) [1] "6" "16" "2" "11"
- 論理値
いわゆるTRUE(真)とFALSE(偽)です。
ただ、Rでは入力の規定値として、TRUEをTでFALSEをFで指示できます。
ですから、TRUEでもTでも同じ結果を返します。
> (x <- c(TRUE,FALSE,TRUE,TRUE)) [1] TRUE FALSE TRUE TRUE > (y <- c(T,F,T,T)) [1] TRUE FALSE TRUE TRUE
ただ、同時にTとFが特殊な意味を持つことになるので、オブジェクトを作るときはT、もしくはFを避けたほうが無難です。
> x[2] <- TRUE > x [1] TRUE TRUE TRUE TRUE > x[2] <- T > x [1] TRUE TRUE TRUE TRUE
このように通常はTRUEでもTでも代入可能ですが、
> (T <- LETTERS[1:4]) [1] "A" "B" "C" "D" > x[2] <- TRUE > x [1] TRUE TRUE TRUE TRUE > x[2] <- T 警告メッセージ: In x[2] <- T : 置き換えるべき項目数が,置き換える数の倍数ではありませんでした
Tが文字ベクトルになったため、エラーになってしまいます。