Различия между векторами _включая_ NA - PullRequest
6 голосов
/ 01 декабря 2011

Предположим, у меня есть вектор x<-c(1,2,NA,4,5,NA).

Я применяю некоторый мифологический код к этому вектору, что приводит к другому вектору, y<-c(1,NA,3, 4,10,NA)

Теперь я хочу выяснить , в каких позициях мои два вектора отличаются, где я считаю два NA с одинаковыми, а один NA и не NA (например, второй элемент двух примеров векторов).

В частности, для моего примера я бы хотел получить вектор, содержащий c(2,3,5).

Для моего варианта использования я не доволен вектором логических переменных, но, очевидно, я могу легко преобразовать (which), поэтому я тоже приму это.

У меня есть несколько решений, таких как:

simplediff<-x!=y
nadiff<-is.na(x)!=is.na(y)
which(simplediff | nadiff)

но мне кажется, что я изобретаю колесо здесь. Есть ли лучшие варианты?

Ответы [ 2 ]

6 голосов
/ 01 декабря 2011

Как насчет цикла и использования identical?

 !mapply(identical,x,y)
[1] FALSE  TRUE  TRUE FALSE  TRUE FALSE

И для позиций:

seq_along(x)[!mapply(identical,x,y)]
[1] 2 3 5

или

which(!mapply(identical,x,y))
[1] 2 3 5
0 голосов
/ 01 декабря 2011

Одно возможное решение (но, конечно, оно не самое лучшее):

(1:length(x))[-which((x-y)==0)]
...