2013-04-18 37 views
1
> 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不僅比較了矢量內容,還比較了名稱。如何讓相同忽略屬性/名稱?

如何避免名稱檢查而不手動刪除它們?

回答

2

這給出了所期望的結果:

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

這給出了一個有用的結果,但是誤導信息:

> mapply("==", a ,b) 
Var2 Var3 Var4 Var5 Var6 
TRUE TRUE TRUE TRUE TRUE 
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" 

,它告訴你的名字是missmatch。

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

該函數嘗試一些不同的變換來看看它是否能夠使這些值相等。在這種情況下,它重命名對象並刪除名稱。