2017-02-20 15 views
-3

у меня есть что-то странное при сравнении двух векторов:R почему "==" операция не возвращает такой же, как% в%

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

это возвращающие: TRUE, FALSE FALSE FALSE FALSE FALSE TRUE ИСТИНА

в конце для:

which(individuals == m) 

которые возвращают: 1 7 8

Что мне не хватает?

+2

Что будет ваш ожидаемый результат, возможно, вы хотите '% in%' – user20650

+0

извините, я должен был бы точно сказать, для чего (индивидуалы == m). % в% это работа. – Bas

ответ

4

Результат, который вы получите, действительно правильный.
R сравнивает каждое значение парно:

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%:

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 

Причина неожиданного результата, как == сравнивает переработанные элементы, т.е. значения в «индивиды» реплицируются на длине «м» вектор

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% in% persons' возможно – user20650

+1

@ user20650 Спасибо, но если вы нашли свой комментарий, я оставил его на случай, если вы хотите ответить. Кроме того, кто-то еще отправил – akrun

+1

fair dos ........ хотя, из комментария op ^^, возможно, после всего ответа 'match (individual, m)' – user20650