如何让相同的忽略属性/名称?

时间:2013-04-18 14:58:10

标签: r

> str(a)
 Named int [1:5] 0 0 0 0 0
 - attr(*, "names")= chr [1:5] "Var2" "Var3" "Var4" "Var5" ...
> str(b)
 Named int [1:5] 0 0 0 0 0
 - attr(*, "names")= chr [1:5] "Var1" "Var2" "Var3" "Var4" ...
> identical(a,b)
[1] FALSE

我意识到identical不仅要比较矢量内容,还要比较名称。

如何避免名称检查而不手动删除它们?

3 个答案:

答案 0 :(得分:4)

使用all.equal

a <- c(Var2=0, Var3=0, Var4=0)
b <- c(Var1=0, Var2=0, Var3=0)
all.equal(a, b)
# [1] "Names: 3 string mismatches"

它告诉你名字是不匹配的。

b <- c(Var1=0, Var2=0, Var3=1)
all.equal(a, b)
# [1] "Names: 3 string mismatches"  "Mean absolute difference: 1"

答案 1 :(得分:4)

您可以考虑compare包:

library(compare)
a <- c(Var2=0, Var3=0, Var4=0)
b <- c(Var1=0, Var2=0, Var3=0)
compare(a, b, allowAll=TRUE)
# TRUE
#  renamed
#  dropped names

该函数尝试一些不同的转换,以查看它是否可以使值相等。在这种情况下,它重命名了对象并删除了名称。

答案 2 :(得分:2)

这给出了期望的结果:

> identical( unname(a), unname(b))
[1] TRUE

这给出了一个有用的结果,但误导了信息:

> mapply("==", a ,b)
Var2 Var3 Var4 Var5 Var6 
TRUE TRUE TRUE TRUE TRUE