R を使用する場合、通常、オブジェクトとオブジェクトが同じidentical(a,b)
かどうかを確認するために使用します。これが返された場合、これらの違いがどこにあるかを確認できるようにしたいと思います...これを表示する関数はありますか?a
b
FALSE
4 に答える
これはあなたの質問に正確に答えるわけではありませんが、「比較」パッケージにも興味があるかもしれません。
特に、入力に一致するように比較オブジェクトを変換しようとしているように見える関数に引数 " allowAll=TRUE
"があり、compare()
どの変換が必要であり、オブジェクトが同じであるかどうかを示します。
まず、いくつかのデータ。「a」、「b」、「d」、および「e」は非常に似ています。
a <- data.frame(A = 1:10, B = LETTERS[1:10])
b <- data.frame(C = 1:10, B = LETTERS[1:10])
d <- data.frame(A = 1:10, B = letters[1:10])
e <- data.frame(A = 1:10, B = letters[1:10])
f <- data.frame(A = c(1, 3, 4, 5, 6, 7, 8, 11, 12, 13),
B = LETTERS[c(1, 3, 2, 4, 5, 6, 9, 8, 7, 10)])
次に、compareを使用して、データを同じにすることができたかどうかを確認します。「b」、「d」、「e」については、特定の変換を適用して「a」と同じにすることはできましたが、「f」と「a」を比較するとできませんでした。
(w <- compare(a, b, allowAll=TRUE))
# TRUE
# renamed
# dropped names
(x <- compare(a, d, allowAll=TRUE))
# TRUE
# [B] dropped attributes
(y <- compare(a, e, allowAll=TRUE))
# TRUE
# [B] dropped attributes
(z <- compare(a, f, allowAll=TRUE))
# FALSE [FALSE, FALSE]
# [A] coerced from <numeric> to <integer>
比較オブジェクトの詳細も表示されます。
str(x)
# List of 8
# $ result : logi TRUE
# $ detailedResult : Named logi [1:2] TRUE TRUE
# ..- attr(*, "names")= chr [1:2] "A" "B"
# $ transform : Named chr "[B] dropped attributes"
# ..- attr(*, "names")= chr "B"
# $ tM :'data.frame': 10 obs. of 2 variables:
# ..$ A: int [1:10] 1 2 3 4 5 6 7 8 9 10
# ..$ B: int [1:10] 1 2 3 4 5 6 7 8 9 10
# $ tC :'data.frame': 10 obs. of 2 variables:
# ..$ A: int [1:10] 1 2 3 4 5 6 7 8 9 10
# ..$ B: int [1:10] 1 2 3 4 5 6 7 8 9 10
# $ tMpartial :'data.frame': 10 obs. of 2 variables:
# ..$ A: int [1:10] 1 2 3 4 5 6 7 8 9 10
# ..$ B: Factor w/ 10 levels "A","B","C","D",..: 1 2 3 4 5 6 7 8 9 10
# $ tCpartial :'data.frame': 10 obs. of 2 variables:
# ..$ A: int [1:10] 1 2 3 4 5 6 7 8 9 10
# ..$ B: Factor w/ 10 levels "a","b","c","d",..: 1 2 3 4 5 6 7 8 9 10
# $ partialTransform: chr(0)
# - attr(*, "class")= chr [1:2] "multipleComparison" "comparison"
このパッケージには、他のいくつかの関数と、比較前に許可される変換のタイプを制限または拡張できる多くの引数も含まれています。
all. equal() を探しています
a <- data.frame(A = 1)
b <- data.frame(B = 1)
all.equal(a, b)
[1] "Names: 1 string mismatch"
d <- data.frame(B = 2)
all.equal(b, d)
"Component 1: Mean relative difference: 1"
all.equal(a, d)
[1] "Names: 1 string mismatch"
[2] "Component 1: Mean relative difference: 1"
を使用して、論理値を持つオブジェクトを作成できます
a == b
FALSE
両方のオブジェクトが異なる値を持つ値になります。
以下も使用できます。
a[a != b]
また
b[a != b]
違いがどこにあるかを確認します。
2 つのデータフレーム c1 と c2 の違いを特定する機会があり、このようなクイック ハックを作成しました。役立つ場合は、微調整を続けてください。
for (i in 1:nrow(c1)) {
if (!identical(c1[i,], c2[i,])) {
print(paste("Differs in row", i))
stop()
}
}