检查两个向量的等价性,没关系顺序

时间:2017-03-09 17:58:32

标签: r if-statement vector

假设我有一个数字向量,其中一个用作关键字:

key  <- c("A", "B")
vec1 <- c("B", "A")      #one that changes the order
vec2 <- c("A")           #one that is less one 
vec3 <- c("A", "B", "C") #one that is plus one
vec4 <- c("A", "B")      #this one is identical 

我希望支票如下:

if(vec [has all the elements of] key == TRUE)

所以,结果将会出现:

vec1 == TRUE
vec2 == FALSE
vec3 == FALSE
vec4 == TRUE

我已经尝试了all()但是......

all(key %in% vec1)  #TRUE  (as hoped)
all(key %in% vec2)  #FALSE (as hoped)
all(key %in% vec3)  #TRUE  (drat!)
all(key %in% vec3)  #TRUE  (as expected)

我可以通过多种条件完成工作:

all(key %in% vec1) & all(vec1 %in% key) #TRUE
all(key %in% vec2) & all(vec2 %in% key) #FALSE
all(key %in% vec3) & all(vec3 %in% key) #FALSE
all(key %in% vec4) & all(vec4 %in% key) #TRUE

我想知道是否有更优雅的方式?

2 个答案:

答案 0 :(得分:1)

如果理解正确,您可以尝试setequal(key, vec)

对于上面的矢量集,它会生成以下结果:

> setequal(key, vec1)
[1] TRUE
> setequal(key, vec2)
[1] FALSE
> setequal(key, vec3)
[1] FALSE
> setequal(key, vec4)
[1] TRUE

答案 1 :(得分:0)

您可以对密钥和每个候选向量进行排序,并比较排序的版本。