首页 > 解决方案 > 怎么可能所有(`all`)都为真,而没有(`any`)同时为真?

问题描述

a <- character()
b <- "SO is great"

any(a == b) 
#> [1] FALSE

all(a == b)
#> [1] TRUE

手册描述了这样的“任何” 给定一组逻辑向量,至少有一个值是真的吗? 因此,在比较中甚至没有一个值a == b产生 TRUE。如果是这种情况,“任何”如何返回 FALSE 而“所有”返回 TRUE?'all' 被描述为给定一组逻辑向量,所有的值都是真的吗?.

简而言之:所有值都是 TRUE 并且没有一个同时是 TRUE?我不是专家,但这看起来很奇怪。

问题:

  1. 是否有合理的解释,或者只是 R 的一些怪癖?

  2. 有什么方法可以解决这个问题?

reprex 包(v0.3.0)于 2021-01-08 创建

标签: rlogiccomparison

解决方案


关于问题 2,我知道identical。它适用于我能想到的所有情况。

a <- "a"
b <- "b"
identical(a, b) # FALSE >> works
#> [1] FALSE

a <- character(0)
identical(a, b) # FALSE >> works
#> [1] FALSE

a <- NA
identical(a, b) # FALSE >> works
#> [1] FALSE

a <- NULL
identical(a, b) # FALSE >> works
#> [1] FALSE

a <- b
identical(a, b) # TRUE >> works
#> [1] TRUE

identical似乎是一个很好的解决方法,尽管对于像我这样的兼职开发人员来说,它仍然感觉像是一种解决方法。还有更多的解决方案吗?更好的?为什么R首先表现得像这样(见问题)?

reprex 包(v0.3.0)于 2021-01-08 创建


推荐阅读