"OR" r 中的条件为 NA 和空白

"OR" condition in r with NA and blank

最近看到一道题,不懂。在这里你有:

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

并且 r 中的 || 条件不符合我的兴趣:识别 NA 和空白:

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

我期待 if 功能 return TRUE 但它是 FALSE。有人可以帮我理解这个问题吗?谢谢!

编辑:

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

注意||两边都是向量

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 值,右侧将不会被执行side 和事实 || 如果左侧是 TRUE(短路),则 || 永远不会运行 || 的右侧。如果 x 完全是 NA 那么 any(x == " ") 将等于 NA 而不是 TRUEFALSE 这使得 NA 的测试左边很重要。

(注意|是不同的,它不短路,在|执行前两边都求值。)