2017-02-20 76 views
-3

返回相同%我有一些奇怪的事情比較兩個向量時:[R爲什麼 「==」 操作未%

individuals=c("A","C","X","Z") 
m=c("A", "B", "C", "D", "E", "F", "X", "Z") 
individuals == m 

它返回:TRUE FALSE FALSE假假假TRUE TRUE

在末端爲:

which(individuals == m) 

其中返回:1 7 8

我錯過了什麼?

+2

什麼將會是你的預期結果,也許你想'%in%' – user20650

+0

抱歉,我應該有精確的,是爲哪個(個人==米)測試。與%在%的工作。 – Bas

回答

4

你得到的結果確實是正確的。

individuals | m | res 
    A  | A | T 
    B  | C | F 
    C  | X | F 
    D  | Z | F 

它,然後回收m

individuals | m | res 
    E  | A | F 
    F  | C | F 
    X  | X | T 
    Z  | Z | T 

如果你想檢查的m元素是individuals使用%in%
R每個值兩兩比較

m %in% individuals 

# TRUE FALSE TRUE FALSE FALSE FALSE TRUE TRUE 
2

我們可以使用match

!is.na(match(m, individuals)) 
#[1] TRUE FALSE TRUE FALSE FALSE FALSE TRUE TRUE 

的原因意想不到的結果是如何==比較再循環元件在「個體」被複制到的「M」的長度,即該值向量

rep(individuals, length.out = length(m)) 
#[1] "A" "C" "X" "Z" "A" "C" "X" "Z" 

m==rep(individuals, length.out = length(m)) 
#[1] TRUE FALSE FALSE FALSE FALSE FALSE TRUE TRUE 
+1

'm%%個人'也許 – user20650

+1

@ user20650謝謝,但如果發現您的評論,所以我留下它,以防萬一你想回答。另外,別人也發貼 – akrun

+1

fair dos ........雖然,從評論op ^^,也許畢竟答案是'match(個人,米)' – user20650