我在 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]<-... may have caused (unnoticed) problems with other types of vectors such as in data.frames or matrices. Has anyone encountered any problems with this or does this logical NA referencing work consistently with other types of vectors?
根据
?NA
,NA 是一个逻辑值,如 TRUE
和 FALSE
。当使用逻辑子集时,期望逻辑值是合理的。此外,帮助指出
逻辑计算将
视为缺失的NA
/TRUE
值,因此如果表达式不依赖于FALSE
操作数,则可能返回TRUE
或FALSE
。NA
在您的情况下,
x[x==1]
不依赖于NA
,并且不会为TRUE
返回NA
,所以它是安全的。如果您特别想在执行复合操作之前识别 NA
,可能会出现问题,这些操作可能会返回 TRUE
(如 (NA_real_||TRUE
)),在这种情况下,您应该首先测试它们/删除它们。