向量之间的差异_including_ NA

Nic*_*bbe 6 r vector na

假设我有一个向量x<-c(1,2,NA,4,5,NA).

我将一些神话代码应用于该向量,从而产生另一个向量, y<-c(1,NA,3, 4,10,NA)

现在我想知道我的两个向量在哪个位置不同,其中我将两个NAs视为相同,一个NA和非NA(例如两个示例向量的第二个元素).

具体来说,对于我的例子,我想最终得到一个矢量控件c(2,3,5).

对于我的用例,我不满足于逻辑变量的向量,但显然我可以轻松转换(which),所以我也会接受它.

我有一些解决方案,如:

simplediff<-x!=y
nadiff<-is.na(x)!=is.na(y)
which(simplediff | nadiff)
Run Code Online (Sandbox Code Playgroud)

但感觉就像我在这里重新发明轮子一样.有更好的选择吗?

Jam*_*mes 6

循环和使用identical怎么样?

 !mapply(identical,x,y)
[1] FALSE  TRUE  TRUE FALSE  TRUE FALSE
Run Code Online (Sandbox Code Playgroud)

对于职位:

seq_along(x)[!mapply(identical,x,y)]
[1] 2 3 5
Run Code Online (Sandbox Code Playgroud)

要么

which(!mapply(identical,x,y))
[1] 2 3 5
Run Code Online (Sandbox Code Playgroud)


Man*_*món 0

一种可能的解决方案(但肯定不是最好的):

(1:length(x))[-which((x-y)==0)]
Run Code Online (Sandbox Code Playgroud)