R 空布尔集相等性的检验

R 空布尔集相等性的检验,r,logic,R,Logic,在R中有一个比较似乎很奇怪: > logical(0) == logical(0) logical(0) > logical(0) != logical(0) logical(0) 从数学上看,这两个语句的计算结果应该是TRUE和FALSE。为什么这两条语句的计算结果都是空集 ==和=执行元素级比较。结果应该与输入具有相同的长度(在必要时循环使用之后),因此结果的长度应该为0,因为它们都是长度0 它不是问两个集合/向量作为一个整体是否相等。如果您希望这样,那么您应该根据您的特定

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

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


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

从数学上看,这两个语句的计算结果应该是
TRUE
FALSE
。为什么这两条语句的计算结果都是空集

==
=执行元素级比较。结果应该与输入具有相同的长度(在必要时循环使用之后),因此结果的长度应该为0,因为它们都是长度0

它不是问两个集合/向量作为一个整体是否相等。如果您希望这样,那么您应该根据您的特定用例使用
idential
all.equal

> identical(logical(0), logical(0))
[1] TRUE
编辑:我突然想到,你可能对设置相等感兴趣,而不是完全相同或全部相等。如果要测试两个向量是否包含相同的值,可以使用
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