测试空布尔集是否相等

Agr*_*ist 3 logic r

在R中,有一个比较似乎很奇怪:

> logical(0) == logical(0)
logical(0)


> logical(0) != logical(0)
logical(0)
Run Code Online (Sandbox Code Playgroud)

空集的数学等式来看,似乎这两个陈述的计算结果应为TRUEFALSE。为什么这两个语句却求值为空集?

Das*_*son 5

==!=进行逐元素比较。结果的长度应与输入的长度相同(如有必要,在回收之后),因此结果的长度应为0,因为它们的长度均为0。

这不是在问两个集合/向量整体是否相等。如果需要,则应使用identicalall.equal根据您的特定用例而定。

> identical(logical(0), logical(0))
[1] TRUE
Run Code Online (Sandbox Code Playgroud)

编辑:在我看来,您可能对set equals感兴趣,而不是完全相同或全部。如果要测试两个向量是否包含相同的值,可以使用setequal

> setequal(1:3, 1:2)
[1] FALSE
> # order doesn't matter for sets
> setequal(c(1,2), c(2,1))
[1] TRUE
> setequal(logical(0), logical(0))
[1] TRUE
Run Code Online (Sandbox Code Playgroud)