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

时间:2017-06-27 07:25:36

标签: r null logical-operators

为什么

isTRUE(NULL != 2)
[1] FALSE

我将如何获得TRUE?

在我的实际案例中,我有变量,如果值不同,我想处理一些事情。但是,当一个值为NULL时,我不认为它们是不同的!

2 个答案:

答案 0 :(得分:10)

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

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

identical(4, 2) 
#FALSE

identical(NULL, 2) 
#FALSE

identical(2, 2) 
#TRUE

答案 1 :(得分:0)

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

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