在 R 中使用 `-1L` 而不是 `-1` 有什么危险吗?

Is there any danger in using `-1L` instead of `-1` in R?

我正在比较和替换(缺失的)值作为我管道的一部分。缺失值在我的 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的类型是整型,则无所谓。如果它是一个指定的双倍,也没关系。如果它是一个双精度数并且是计算的结果,那么您无论如何都不应该使用 == (由于 floating point number precision)。当然,将 NA 值编码为数字是劣质软件设计的标志。

我建议在导入过程中将这些值转换为 NA

read.table(text = "1,2,-9", sep = ",", na.strings = "-9")
#  V1 V2 V3
#1  1  2 NA

那你可以使用is.na来避免这个问题。