繁体   English   中英

为什么 is.na() 在 R 中的空向量的第一个元素上返回 TRUE?

[英]Why does is.na() return TRUE on the first element of an empty vector in R?

所以我被要求写一个 function 来返回一个向量(特别是一个字符向量)。 当向量为 NA 时,我应该打印一些东西。 当我检查一个我知道是空的向量时:

is.na(foo)

我得到 -

logical(0)

但是当我检查时:

is.na(foo[1])

我明白了

TRUE

这是为什么?

编辑-

被问到我的foo来源是什么:

它来自库dplyr中的 function filter

state_name_vec <- filter(uscities, city == city_name)$state_name

我可以得到一个字符向量、一个字符(即其他语言中的字符串),或者我猜是一个空字符向量。 我想我也可以获得一个 data.frame,但就我而言,我没有。

我试图了解.data类型的含义,过滤器返回的含义。

https://dplyr.tidyverse.org/reference/filter.html#:~:text=%20filter()%20function%20is,%2C%20unlike%20base%20subsetting%20with%20%5B%20。

谷歌搜索后,我得到了这个:

https://cran.r-project.org/web/packages/dplyr/vignettes/programming.html

所以我想我的问题是当.data为空时会发生什么?

如果fooNULL ,那么在这两种情况下它都会返回logical(0) foo[1] is NULL

foo <- c()
foo[1]
#NULL
is.na(foo)
#logical(0)
is.na(foo[1])
#logical(0)

根据?NULL

NULL 可以以几乎任何语法上合法的方式进行索引(参见摘录):无论是否有意义,结果始终是 NULL。 值为 NULL 的对象可以由替换运算符更改,并将强制转换为右侧的类型。


但是,如果创建的 object 是以下之一(如评论中所述)

foo <- character()
foo <- numeric()
foo <- integer()

向量的length为 0,不是 NULL。 因此,如果我们尝试通过指定索引来提取值,它会被相应的NA填充。 基于?Extract

提取时,数字、逻辑或字符 NA 索引选择未知元素,因此在逻辑、integer、数字、复数或字符结果以及 NULL 的对应元素中返回 NA 用于列表。 (它返回 00 作为原始结果。)

foo[1]
#[1] NA
foo[1:3]
#[1] NA NA NA
foo[4]
#[1] NA

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM