【问题标题】:How to smartly remove floating point errors from imported data in R如何巧妙地从 R 中的导入数据中删除浮点错误
【发布时间】:2016-01-14 20:03:05
【问题描述】:

我在 R 中工作,我从数据库中导入数据。该数据库提供带有浮点舍入误差的数字。例如,我正在使用的 2 个值是 Limit1

Limit1 应四舍五入到小数点后 3 位,Limit2 应四舍五入到小数点后两位。虽然我当然可以使用 round 函数,但我希望有一个现有的函数,或者有人编写的东西可以智能地将它们转换为正确的小数,而无需我手动、硬编码将它们逐个舍入。

我一直在想出一种奇怪的方法来计算连续的 9 或 0,并从该信息中找出有效的小数位数,假设没有一个真实值包含“000”或“999”。但是,我觉得我不可能是唯一遇到这种情况的人。必须有更好的方法。

谢谢

【问题讨论】:

  • zapsmall() 函数用于处理浮点错误,但它不适用于这些数字。如果你只是在他们两个上都使用round(x,7)呢?
  • 也许,见,?signif?例如。 as.character(c(Limit1, Limit2)); as.character(signif(c(Limit1, Limit2))) 似乎适用于您的示例。
  • 我不明白你为什么不能按原样使用这些数字。
  • 对于计算它们很好,但我需要在我正在绘制的一些图表的图例上显示这些数字。有趣的是,如果我让 R 在控制台中向我显示这些值,它会完美地将它们四舍五入以供查看 - 它是否使用我可以访问的函数来保留这些四舍五入的值?
  • 你正在寻找像print.default这样的函数(print被隐式调用用于控制台输出,你可以设置一些全局的options),formatsprintfformatC, ...

标签: r floating-point rounding-error


【解决方案1】:

根据您在 cmets 中的说明,您需要以下内容:

Limits <- c(0.0280000008642673, 0.259999990463257)
plot(1)
legend("topright", legend = prettyNum(Limits), fill = 1:2)

如果您只关心格式,我真的没有理由更改实际数字。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-11
    • 2016-10-09
    • 1970-01-01
    • 1970-01-01
    • 2022-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多