【问题标题】:Is there any danger in using `-1L` instead of `-1` in R?在 R 中使用“-1L”而不是“-1”有什么危险吗?
【发布时间】:2016-04-28 07:52:54
【问题描述】:

作为管道的一部分,我正在比较和替换(缺失)值。缺失值在我的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 值编码为数字是软件设计低劣的标志。
  • 如需进一步阅读上述评论和浮点错误,this is worth a glance
  • @Roland 谢谢,你能把你的评论写下来作为答案吗?不幸的是,我们在这里经常使用 ASCII 文件。他们伴随着头痛!并且感谢 Alistaire,我实际上已经阅读了那本书的一部分,也许我应该继续阅读:)

标签: r int double negative-number


【解决方案1】:

如果value 的类型是整数,这无关紧要。如果它是分配的双倍,那也没关系。如果它是 double 并且是计算的结果,则无论如何都不应该使用 ==(由于 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 来避免这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-09
    • 1970-01-01
    • 2015-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-20
    • 1970-01-01
    相关资源
    最近更新 更多