在 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
来避免这个问题。
我正在比较和替换(缺失的)值作为我管道的一部分。缺失值在我的 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
来避免这个问题。