![](/img/trans.png)
[英]R if is.na() is True then perform a function not working; the condition has length > 1 and only the first element will be used
[英]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
类型的含义,过滤器返回的含义。
谷歌搜索后,我得到了这个:
所以我想我的问题是当.data
为空时会发生什么?
如果foo
是NULL
,那么在这两种情况下它都会返回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.