将一个值与 null 进行比较。为什么这是真的?

Compare a value to null. Why is this true?

为什么是

isTRUE(NULL != 2)
[1] FALSE

我怎样才能收到 TRUE?

在我的真实情况下,我有变量,如果值不同,我想处理一些东西。但是,当一个值为 NULL 时,我不认为它们是不同的!

正如@Roland 指出的那样,我们不能直接对 NULL 对象执行任何逻辑操作。为了比较它们,我们可能需要对 is.null 执行额外的检查,然后执行逻辑比较。

我们可以使用 identical 来比较处理整数的值以及 NULL

identical(4, 2) 
#FALSE

identical(NULL, 2) 
#FALSE

identical(2, 2) 
#TRUE

为了回答您问题的为什么部分:

NULL 与其他类型进行比较会得到 logical(0)(即,长度为零的逻辑向量)。所以,

isTRUE(NULL != 2)

实际上是

isTRUE(logical(0))

FALSE

为了比较可能有 NULL 值的值,您也可以这样做(使用短路逻辑运算符):

a <- 2
b <- 2
!is.null(a) && !is.null(b) && a==b
#[1] TRUE

a <- 3
b <- 2
!is.null(a) && !is.null(b) && a==b
#[1] FALSE

a <- 2
b <- NULL
!is.null(a) && !is.null(b) && a==b
#[1] FALSE