在R语言定义中,NA简要描述了值,其中一部分表示
......尤其
FALSE & NA是FALSE,TRUE | NA是TRUE.NA不等于任何其他价值或自身; 测试NA是使用is.na.但是,NA值将与另一个NA值匹配match.
关于声明" NA 不等于任何其他价值或自身 ",
更新:再次修订的问题是
什么是推理,如果有的话,后面 NA 的匹配 NA 中 match,并在语言无处?
对我来说没有意义的是,任何人都不知道(或者不会丢失)的缺失值会匹配同一类型的另一个缺失值.自从我发布这个,我发现了一些example(match)提供一些推理的东西.字符强制改变了它的类型.如果我喜欢的话,我可以把它彻底抹掉.
match(NA, NA)
# [1] 1
match(NA, NA_real_)
# [1] 1
match(NA_character_, NA_real_)
# [1] 1
match(paste(NA), NA)
# [1] NA
gsub("NA", "", NA)
# [1] NA
gsub("NA", "", paste(NA))
# [1] ""
is.na(NA)
# [1] TRUE
is.na(paste(NA))
# [1] FALSE
Run Code Online (Sandbox Code Playgroud)
为搅拌锅而道歉,但有些文件对此并不清楚.它可能归结为R解析器/ deparser以及您可以将任何内容转换为R中的文本字符对象的事实.
原帖:
现在提到"但是,一个 NA 值将匹配另一个 NA 值 match."
如果NA它不等于它自己,为什么它与它自身匹配match?还在identical?这是故意的吗?
NA == NA ## expecting TRUE
# [1] NA
NA != NA
# [1] NA
x <- NA
x == x
# [1] NA
match(NA, NA)
# [1] 1
identical(NA, NA)
# [1] TRUE
all.equal(NA, NA)
# [1] TRUE
Run Code Online (Sandbox Code Playgroud)
far*_*nsy 15
这是一个惯例问题.这种方式有很好的理由==. NA是R中的一个特殊值,它应该表示缺少的数据,应该与其他数据区别对待.如果我们开始比较缺失值,就好像它们已知或者两个缺失值彼此相等,就会出现无数非常微妙的错误.
想一想NA"我不知道那里有什么".正确答案3 > NA显然是NA因为我们不知道缺失值是否大于3.好吧,它也是一样的NA == NA.它们都是缺失的值,但真正的价值可能会大不相同,所以正确答案是"我不知道".
R不知道你在分析中做了什么,因此它不会引入后来最终发布的bug并让你感到尴尬,而是不允许比较运算符认为NA是一个值.
match()我写的是一个更具体的目的:找到匹配值的索引.如果你问"我应该将NA与NA匹配"这个问题,那么合理的答案就是"不".不同(并且非常有用)的约定,并且证明是合理的,因为R几乎知道在调用时你想要做什么match().现在,我们应该匹配NA与NA此目的?可以说是有争议的.
想想看,我认为默认match()选择允许NA匹配自己的作者有点奇怪.您可以想象可能用于match()查找NA行table以及其他值的情况,但这很危险.您只需要更加小心,了解您是否在x中有任何NA值,并且只有在您真正想要的情况下才允许它们.您可以通过指定incomparables=NA调用时更改此行为match().