在R中使用具有多个向量的same()

And*_*ndy 31 r

假设我有五个向量:

A<-1:10
B<-1:10
C<-1:10
D<-1:10
E<-1:12
Run Code Online (Sandbox Code Playgroud)

我可以使用相同的()一次测试两个.

identical(A,C)
Run Code Online (Sandbox Code Playgroud)

但我想立刻测试所有这些,看看是否有任何不同于其他的.是否有捷径可寻?

Gre*_*gor 28

我会选择一个,比方说A,然后进行所有成对比较.

all(sapply(list(B, C, D, E), FUN = identical, A))
# [1]  FALSE
Run Code Online (Sandbox Code Playgroud)

删除all()以查看不相同的一个

sapply(list(B, C, D, E), FUN = identical, A)
# [1]  TRUE  TRUE  TRUE FALSE
Run Code Online (Sandbox Code Playgroud)

identical应该是传递的,因此,如果A是相同的C,并D,然后C应该是相同的D.

(感谢@docendo discimus的简化语法.)

  • 稍微改进的是在sapply()前面使用all()函数,以便返回单个true/false. (2认同)

cde*_*man 13

首先想到的是unique在矢量列表上做并检查长度.如果有两个或多个不同的向量,则结果列表的长度将大于1.

length(unique(list(A,B,C,D))) == 1
[1] TRUE

length(unique(list(A,B,C,D,E))) == 1
[1] FALSE
Run Code Online (Sandbox Code Playgroud)


Mat*_*rde 10

另一种选择,只是为了好玩:

Vectorize(identical, 'x')(list(A, B, C, D, E), C)
Run Code Online (Sandbox Code Playgroud)