3
> 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不仅要比较向量内容,还要比较名称。

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

4

3 回答 3

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

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

于 2013-04-18T15:12:02.523 回答
3

This gives the desired result:

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

This gives a useful result but misleading information:

> mapply("==", a ,b)
Var2 Var3 Var4 Var5 Var6 
TRUE TRUE TRUE TRUE TRUE 
于 2013-04-18T18:07:01.240 回答
3

使用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"
于 2013-04-18T15:02:49.163 回答