【发布时间】:2016-03-08 08:04:39
【问题描述】:
最近,我在table 函数中遇到了一个出乎我意料的行为:
例如,让我们采用以下向量:
ex_vec <- c("Non", "Non", "Nan", "Oui", "NaN", NA)
如果我检查向量中的 NA 值,"NaN" 不被视为一个(如预期的那样):
is.na(ex_vec)
# [1] FALSE FALSE FALSE FALSE FALSE TRUE
但如果我试图获得不同的值频率:
table(ex_vec)
#ex_vec
#Nan Non Oui
# 1 2 1
"NaN" 没有出现在表格中。
但是,如果我“要求”table 显示 NA 值,我会得到:
table(ex_vec, useNA="ifany")
#ex_vec
# Nan NaN Non Oui <NA>
# 1 1 2 1 1
因此,字符串"NaN" 在table 调用中被视为NA 值,而在输出中被视为非NA 值。
我知道(这会更好,并且)我可以通过将我的向量转换为 factor 来解决我的问题,但尽管如此,我真的很想知道这里发生了什么。有人有想法吗?
【问题讨论】:
-
这只是基本用法......就像“为什么
sum(c(1, NA))返回NA?”table(..., exclude = if (useNA == "no") c(NA, NaN), useNA = c("no", "ifany", "always")我不明白这些答案的目的 -
@rawr 解释为什么 string 被视为
NaN值?这不是被问到的用法,而是为什么。它比文档涵盖的 sum 示例不那么明显。 (我的意思是:NaN != "NaN"so 为什么要排除"NaN",因为它不是排除向量的一部分) -
@Tensibai,文档说
exclude: levels to remove for all factorslevels 不是NA也不是NaN,它们是字符串..离开字符串试试table(1, exclude = 1) -
@rawr 我清楚地明白这对你来说是显而易见的,根据这个问题分数(以及我自己的头抓来找出根本原因),这对每个人来说并不是那么明显......所以我确实认为答案会对其他人有所帮助。 (并且
NA是一个有效级别,即使不是字符串对象,但我明白你的意思NaN在字符向量中无效) -
大家安定下来!我认为发现这种行为令人困惑是合理的。
exclude可以合理地解读为引用要排除的所提供向量的元素。因此,如果您告诉它排除NaN(数字),它仍然会排除"NaN"(字符),这可能会令人惊讶。