我刚开始学习R,遇到了如下一段代码
vec_1 <- c("a","b", NA, "c","d")
# create a subet of all elements which equal "a"
vec_1[vec_1 == "a"]
结果是
## [1] "a" NA
我只是好奇,因为我将vec_1
替换为值“ a”,为什么NA
也出现在我的结果中?
答案 0 :(得分:1)
这是因为任何== NA
的结果都是NA
。甚至NA == NA
都是NA
。
这是vec_1 == "a"
的输出-
[1] TRUE FALSE NA FALSE FALSE
和NA
不是TRUE
或FALSE
,因此当您用NA
子集化任何内容时,您将得到NA
。检查一下-
vec_1[NA]
[1] NA NA NA NA NA
在处理NA
时,R
试图提供最有信息的答案,即T | NA
返回TRUE
,因为不管NA
是什么。这里还有更多示例-
T | NA
[1] TRUE
F | NA
[1] NA
T & NA
[1] NA
F & NA
[1] FALSE
R无法测试与NA
的相等性。您可以使用%in%
运算符-
5 %in% NA
[1] FALSE
"a" %in% NA
[1] FALSE
vec_1[vec_1 %in% "a"]
[1] "a"