最近,我在 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
值(value)观,我明白了:table(ex_vec, useNA="ifany")
#ex_vec
# Nan NaN Non Oui <NA>
# 1 1 2 1 1
因此,字符串
"NaN"
被视为 NA
内部值 table
调用,同时在输出中被视为不是 NA
值(value)。我知道(这会更好)我可以通过将向量转换为
factor
来解决我的问题。尽管如此,我真的很想知道这里发生了什么。有没有人有想法?
最佳答案
当factor
匹配向量的级别,它转换其 exclude
列出与输入向量相同的类型:
exclude <- as.vector(exclude, typeof(x))
所以如果你的排除列表有
NaN
并且您的向量是字符,会发生这种情况:as.vector(exclude, typeof(letters))
[1] NA "NaN"
哦亲爱的。现在真正的
"NaN"
字符串将被排除。要修复,请使用
exclude=NA
在 table
(和 factor
,如果您正在制造可能会影响此的因素)。我确实喜欢
factor
的文档中的这个: There are some anomalies associated with factors that have ‘NA’ as
a level. It is suggested to use them sparingly, e.g., only for
tabulation purposes.
让人放心...
关于r - 具有 "NaN"值的函数表的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34070563/