测试向量与下标 R 中的 NA 相等

Testing Vector for equality with NAs in subscripts R

提问人:StanW 提问时间:12/22/2020 更新时间:7/25/2023 访问量:58

问:

我在 R 中发现了一个奇怪的行为,并想问它是否会导致问题。 这是我的意思的一个例子:

x<-c(1,2,3,4,NA, 5)
x==1
x

这将返回:

TRUE FALSE FALSE FALSE    NA FALSE

现在假设我想将所有 x==1 更改为 100:

x[x==1]<-100
x

返回:

100   2   3   4  NA   5

因此,出于某种原因,使用带有 NA 的逻辑向量引用 x 是有效的。为什么? 对我来说,NA 的这种“==”行为没有多大意义。 我现在也很担心这种赋值x[x==y]<-...可能对其他类型的向量(例如在 Data.frames 或矩阵中)造成了(未被注意的)问题。有没有人遇到过任何问题,或者这个逻辑 NA 引用是否与其他类型的向量一致?

R 测试 等于 相等

评论

0赞 markus 12/22/2020
你问的是比较的结果还是子集的结果?
0赞 jay.sf 12/22/2020
使用代替 .%in%==
0赞 r2evans 12/22/2020
(1)从技术上讲,是类。存在非逻辑变体(不幸的是,在控制台输出中也可能表示为 )。(2)是原始的,所以看源有点困难。(老实说,我在 github.com/wch/r-source 还没有找到它。似乎没有搜索引擎喜欢搜索,很奇怪。我的信念是,它正在取代已知的,而不仅仅是不。NAlogicalNA`[<-`[<-TRUEFALSE
0赞 r2evans 12/22/2020
同样(但同样透明),它本身似乎在寻找未知的、未知的。`[`FALSETRUE
1赞 jay.sf 12/22/2020
这应该是重复的,但我找不到。

答:

0赞 Avraham 7/25/2023 #1

根据 ,NA 是一个逻辑值,如 和 。使用逻辑子集时,期望逻辑值是合理的。此外,帮助指出?NATRUEFALSE

逻辑计算被视为缺失的 / 值,因此如果表达式不依赖于操作数,则可能会返回 OR。NATRUEFALSETRUEFALSENA

在你的情况下,不依赖于 ,也不会返回 ,所以它是安全的。如果您特别想在执行复合操作之前识别 s,可能会有问题,这些操作可能会返回类似 () 的操作,在这种情况下,您应该首先测试它们/删除它们。x[x==1]NATRUENANATRUENA_real_||TRUE