「違い」のシソーラスを調べると、差異・差・溝・開き・隔たり・異なり・食い違いなど日本語の多様性に改めて驚かされます。しかし、データ解析でオブジェクトの「違い」を正確に判断できないとエラーや致命的な誤解釈の原因となります。
Rのオブジェクト内容の比較方法の例と、便利な「compare」パッケージを紹介します。
違いの判断や結果の再現性は6シグマに近づけたいものです。
パッケージのバージョンは0.2-6。R version 3.2.1でコマンドを確認しています。
パッケージのインストール
下記コマンドを実行してください。
#パッケージのインストール
install.packages("compare")
実行コマンド
詳細はコマンド、パッケージヘルプを確認してください。
#オブジェクトの完全一致:identicalコマンド
#整数だと
identical(3 - 2, 1)
[1] TRUE
class(3 - 2)
[1] "numeric"
#小数を含むと
identical(3.3 - 2.2, 1.1)
[1] FALSE
class(3.3 - 2.2)
[1] "numeric"
#となります
#小数を含んだ比較として
#ほぼ等しい判断:all.equalコマンド
identical(all.equal(3.3 - 2.2, 1.1), TRUE)
[1] TRUE
identical(all.equal(3.000003 - 2.000002, 1.000001), TRUE)
[1] TRUE
#all.equalコマンドは等しくない場合,その情報を示します
Char1 <- c("K", "R", "A", "D", "A")
Char2 <- factor(Char1)
all.equal(Char1, Char2)
[1] "Modes: character, numeric"
[2] "Attributes: < 引数 target は NULL、引数 current は list です >"
[3] "target is character, current is factor"
###ここからcompareパッケージ#####
#パッケージの読み込み
library("compare")
###compareパッケージの利用#####
#比較対象のクラスを自動で変換:compareコマンド
#数値を丸めるオプション以外を適応:allowAllオプション;初期値TURE
#小数を含む数字の比較
compare(model = 3.3 - 2.2, comparison = 1.1, allowAll = TRUE)
TRUE
#comparisonのクラスをmodelのクラスに変換:coerceオプション
compare(model = Char1, comparison = Char2, coerce = TRUE)
TRUE
coerced from <factor> to <character>
#data.frameの比較も可能です
TestData1 <- data.frame(x = 1:5,
y = letters[1:5],
z = c("あ", "い", "う", "え", "お"))
TestData2 <- data.frame(x = 5:1,
y = letters[1:5],
z = rev(c("あ", "い", "う", "え", "お")))
#確認
compare(model = TestData1, comparison = TestData2, allowAll = FALSE)
FALSE [FALSE, TRUE, FALSE]
#数値を丸めて、並び順を無視してcomparisonのクラスを変換して比較
#数値丸め:roundオプション
#順序を無視:ignoreOrderオプション
compare(model = as.numeric(1:10),
comparison = as.character(10:1 + .1),
round = TRUE, coerce = TRUE, ignoreOrder = TRUE)
#as.numeric(1:10)
#[1] 1 2 3 4 5 6 7 8 9 10
#as.character(10:1 + .1)
#[1] "10.1" "9.1" "8.1" "7.1" "6.1" "5.1" "4.1" "3.1" "2.1" "1.1"
TRUE
coerced from <character> to <numeric>
sorted
rounded
少しでも、あなたのウェブや実験の解析が楽になりますように!!