我正在比较和替换(缺失)值作为管道的一部分。缺失值在我的data.table
中标记为-9
。
使用-9L
进行比较是否有危险?
> x <- -9
> typeof(x)
[1] "double"
>
> y <- -9L
> typeof(y)
[1] "integer"
例:
dfmelt[value == -9L, code := paste0("0", "0")]
对:
dfmelt[value == -9, code := paste0("0", "0")]
如果value
的类型是整数,这无关紧要。如果是分配的双精度,也没关系。如果它是双精度数和计算结果,则无论如何都不应该使用 ==(由于浮点数精度)。当然,将NA
值编码为数字是劣质软件设计的标志。
我建议在导入过程中将这些值转换为NA
:
read.table(text = "1,2,-9", sep = ",", na.strings = "-9")
# V1 V2 V3
#1 1 2 NA
然后您可以使用is.na
并避免此问题。