2017-02-20 64 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