" OR" r中的条件为NA且为空

时间:2017-02-28 16:30:01

标签: r conditional-statements na missing-data nonblank

我最近看到一个我不明白的问题。你有:

 x <- c(1,2,3,4,45,654,3,NA," ",8,5,64,54)

||中的r条件不符合我的利益:识别NAs和空白:

if(is.na(x) || x==" ") {...}

我希望if函数返回TRUE,但它会FALSE。有人可以帮我理解这个问题吗?谢谢!

编辑:

很抱歉,我打算在if语句中使用该参数,因此长度应为1. |不适用于此。

1 个答案:

答案 0 :(得分:5)

请注意,||的两边都是向量

x <- c(1,2,3,4,45,654,3,NA," ",8,5,64,54)

is.na(x)
## [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

x == " "
## [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

如果任何一方是矢量,那么它只使用它的第一个元素

is.na(x) || x == " "
## [1] FALSE

与:

相同
is.na(x)[1] || (x == " ")[1]
## [1] FALSE

||的双方都在上面一行FALSE

如果您要确定任何元素是NA还是" "那么

anyNA(x) || ( " " %in% x )
## [1] TRUE

您也可以使用any(x == " ")作为右侧,但这只有效,因为我们知道如果由于左侧有任何NA值,右侧将不会被执行如果左侧是||(短路),则||永远不会运行TRUE的右侧。如果x完全NA,则any(x == " ")将等于NA而不是TRUEFALSE,这会使NA成为|左手边重要。

(注意|是不同的。它不会短路。在执行brew install libmagic之前评估双方。)