使用 == 运算符时 NA 时 R 返回 FALSE

问题描述 投票:0回答:4

我有一个

if
循环,需要逻辑检查。

但是检查是 x==2

这样

> x<-2
> x==2
[1] TRUE

然而当

> x<-NA
> x==2
[1] NA

我该如何处理这个问题?我在

for
循环中使用此检查,循环停止执行。当
x<-NA
时,
x==2
应返回
FALSE

r for-loop if-statement
4个回答
4
投票

1) 首先确保 x 不为 NA,然后进行 AND 所需的检查。 如果 x 为 NA,那么它会减少为 FALSE & NA,并且等于 FALSE。

x <- c(1, NA, 2) # test input

(!is.na(x)) & x == 2
## [1] FALSE FALSE  TRUE

2) 如果 x 是标量,那么这也有效,因为只有当参数为 TRUE 时,isTRUE(X) 才为 TRUE,如果它是包括 NA 在内的其他任何内容,则为 FALSE。

x <- 2
isTRUE(x == 2)
## [1] TRUE

x <- 0
isTRUE(x == 2)
## [1] FALSE

x <- NA
isTRUE(x == 2)
## [1] FALSE

2a) 或者如果 x 不一定是标量,我们可以这样修改它

x <- c(1, NA, 2) # test input
sapply(x == 2, isTRUE)
## [1] FALSE FALSE  TRUE

2b)

x <- c(1, NA, 2) # test input
Vectorize(isTRUE)(x == 2)
## [1] FALSE FALSE  TRUE

2
投票

您可能想尝试:

x <- 2
ifelse(is.na(x), FALSE, x == 2)
#> [1] TRUE

x <- NA
ifelse(is.na(x), FALSE, x == 2)
#> [1] FALSE

1
投票

使用

%in%
而不是
==
这可能会解决此问题。

x <- 2
x %in% 2
#[1] TRUE

x <- NA
x %in% 2
#[1] FALSE

0
投票

只是一个评论。 Na 的语义类似于“值未知”。因此,如果 x 是 Na,并且您询问 x 是否等于 2,则正确答案实际上是 Na,因为它是未知的。 X==2 无法被证明和排除。

© www.soinside.com 2019 - 2024. All rights reserved.