【问题标题】:R return FALSE when NA when using == operator使用 == 运算符时,当 NA 时 R 返回 FALSE
【发布时间】:2021-12-30 12:43:31
【问题描述】:

我有一个if 循环,需要进行逻辑检查。

但是检查是 x==2

这样

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

但是当

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

我该如何处理这个问题?我在for 循环中使用此检查,循环停止执行。当x&lt;-NA,那么x==2应该返回FALSE

【问题讨论】:

    标签: r for-loop if-statement


    【解决方案1】:

    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 是标量,那么这也有效,因为 isTRUE(X) 仅在参数为 TRUE 时才为 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
      

      【讨论】:

      • 当你的意思是FALSE时,你不应该使用F。总有一天它会咬你!例如。见stackoverflow.com/a/70499993/2554330
      • 感谢@user2554330,提醒我!我正在接受你的建议。
      【解决方案3】:

      使用%in% 代替== 可能会解决此问题。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-05-19
        • 2022-03-19
        • 1970-01-01
        • 2022-11-10
        • 2012-06-20
        • 1970-01-01
        • 2012-08-08
        相关资源
        最近更新 更多