R语言相同判断条件下all()返回TRUE而any()返回FALSE的原因
现象原因解释
你观察到的矛盾本质是数理逻辑中的**空真(Vacuous Truth)**规则在R语言函数中的实现:
- 首先
NULL和任意值做比较运算,返回结果都是长度为0的逻辑向量logical(0),你看到的all(NULL == "Yes")和any(NULL == "Yes")的运行结果,本质就是all(logical(0))和any(logical(0))的结果。 - 对于
all()函数:命题「集合中所有元素都为真」如果作用在空集合上,不存在任何一个元素为假,命题就会被判定为真。比如你说「所有口袋里的硬币都是1元」,如果你口袋里根本没有硬币,这句话找不到反例,逻辑上成立,所以all(logical(0))返回TRUE。 - 对于
any()函数:命题「集合中至少有一个元素为真」如果作用在空集合上,显然找不到符合要求的元素,命题判定为假,所以any(logical(0))返回FALSE。
业务场景适配方案
你提到的用户选择项场景,空逻辑向量对应「用户未做选择」的特殊状态,不需要强行映射为特殊字符串,可以通过自定义封装函数适配你的业务逻辑:
比如你希望空输入时all和any的返回结果符合直觉的对应关系,可以加一层长度判断:
# 自定义适配空向量的all函数,空输入返回FALSE custom_all <- function(x) { if (length(x) == 0) return(FALSE) all(x) } # 自定义适配空向量的any函数,空输入返回FALSE custom_any <- function(x) { if (length(x) == 0) return(FALSE) any(x) }
也可以根据你的实际业务需求,调整空输入时的默认返回值即可。
内容的提问来源于stack exchange,提问作者user11538509
相关产品推荐
相关产品推荐

