【问题标题】:check equivalence of two vector, never mind order检查两个向量的等价性,不要介意顺序
【发布时间】:2017-07-30 20:24:10
【问题描述】:

假设我有一个数字向量,其中一个充当键:

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

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

【问题讨论】:

  • setequal 假设你没有/不关心重复的元素。

标签: r if-statement vector


【解决方案1】:

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

对于您上面的一组向量,它将生成以下结果:

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

【讨论】:

    【解决方案2】:

    您可以制作键和每个候选向量的排序版本,并比较排序后的版本。

    【讨论】:

    • 一般来说,最好提供一些代码来说明您的意思以及它的工作原理(在 OP 的示例和其他边缘情况下)。
    猜你喜欢
    • 2022-08-03
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 2011-07-10
    • 2011-11-28
    • 2023-03-29
    • 1970-01-01
    相关资源
    最近更新 更多