检查两个向量是否在R中包含相同(无序)的元素

Max*_*nis 22 r

我想检查两个向量是否包含相同的元素,即使它们的顺序不同.例如,函数(让我们称之为SameElements)应满足以下条件:

SameElements(c(1, 2, 3), c(1, 2, 3))  # TRUE
SameElements(c(1, 2, 3), c(3, 2, 1))  # TRUE
SameElements(c(1, 2, 1), c(1, 2))  # FALSE
SameElements(c(1, 1, 2, 3), c(3, 2, 1))  # FALSE
Run Code Online (Sandbox Code Playgroud)

编辑1:指定当向量包含相同元素但频率不同时,该函数应返回F.

编辑2:清除问题以省略初始答案,因为现在是我的实际答案.

Mar*_*pov 36

我想你可以用 setequal(a,b)

更新了更新 setequal检查,如果两个向量由相同的元素组成,但它不检查这些元素在每个向量中是否具有相同的出现次数.

  • 相同的矢量长度不足以满足OP的要求.考虑`setequal(c(1,2,1),c(1,2,2))#[1] TRUE (4认同)
  • setequal对我来说是新的,看起来整洁.+1 (2认同)

Max*_*nis 11

代替更清洁的替代方案,这是已知的解决方案:

SameElements <- function(a, b) return(identical(sort(a), sort(b)))
SameElements(c(1, 2, 3), c(1, 3, 2))  # TRUE
SameElements(c(1, 2, 3), c(1, 1, 3, 2))  # FALSE
Run Code Online (Sandbox Code Playgroud)

编辑:identical而不是all.equal(...) == T根据nrussell的建议.