本文へスキップ
からだにいいもの

Rのトピックスを中心に『まだ、まだ、知らない、役に立つ情報?』を発信します。

Rで解析:オブジェクト内容の違いを判断!コマンド紹介と「compare」パッケージ

「違い」のシソーラスを調べると、差異・差・溝・開き・隔たり・異なり・食い違いなど日本語の多様性に改めて驚かされます。しかし、データ解析でオブジェクトの「違い」を正確に判断できないとエラーや致命的な誤解釈の原因となります。

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

少しでも、あなたのウェブや実験の解析が楽になりますように!!

スポンサーリンク
Prices and shipping availability may change. Please refer to the product page at time of purchase.
Content displayed on this site is provided by Amazon and may be updated or removed.
Amazon Associate, karada-good earns income through qualifying sales.