0

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

 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。|不适用于此处。

4

1 回答 1

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而不是TRUE使FALSE左侧的测试变得NA重要。

(注意这|是不同的。它不会短路。在执行之前对双方进行评估|。)

于 2017-02-28T17:00:27.723 回答