> 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
不仅要比较矢量内容,还要比较名称。
如何避免名称检查而不手动删除它们?
答案 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