我最近看到一个我不明白的问题。在这里你有:
x <- c(1,2,3,4,45,654,3,NA," ",8,5,64,54)
并且||
条件r
不符合我的兴趣:识别 NA 和空白:
if(is.na(x) || x==" ") {...}
我期待if
函数返回TRUE
,但它是FALSE
相反的。有人可以在这里帮我理解这个问题吗?谢谢!
编辑:
抱歉,我的意思是在if
声明中使用该参数,因此长度应为 1。|
不适用于此处。
我最近看到一个我不明白的问题。在这里你有:
x <- c(1,2,3,4,45,654,3,NA," ",8,5,64,54)
并且||
条件r
不符合我的兴趣:识别 NA 和空白:
if(is.na(x) || x==" ") {...}
我期待if
函数返回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
由于左侧而存在任何值,则右侧将不会被执行,并且如果左侧||
永远不会运行右侧的事实||
手边是TRUE
(短路)。如果x
完全是,NA
那么any(x == " ")
将等于NA
而不是TRUE
使FALSE
左侧的测试变得NA
重要。
(注意这|
是不同的。它不会短路。在执行之前对双方进行评估|
。)