6

假设我有一个向量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)

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

4

2 回答 2

6

循环和使用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
于 2011-12-01T11:13:59.723 回答
0

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

(1:length(x))[-which((x-y)==0)]
于 2011-12-01T10:57:07.347 回答