【发布时间】:2016-03-03 15:32:29
【问题描述】:
我在网上找到了很多关于此的信息,但我找不到任何准确回答我的问题的信息。我的问题与数字的呈现无关,而是与呈现下方的计算和存储有关。
问题在于 R 中的浮点数。我希望截断它们;但是,我想确保在它们被截断后正确存储它们。
问题是:我有一个数据集,我试图将不同数字之间的差异与我想要的任何阈值进行比较(精确到小数点后 2 位 - 即 0.00、0.05 和 1.00。)。我想确保当我将差异测试为零时,它正在测试完全正确的差异,并且后面没有我不知道的存储问题。
到目前为止,我已经尝试过:
(1) round(并针对 0 和非常小的值进行测试,例如 1e-10)
(2)乘以100和as.integer
当我计算数据集中差异大于我选择的阈值的观察百分比时,这些计算得出不同的答案。
简而言之,在计算差值是否实际为 0 时,如果知道如何最好地存储数字以获得最准确的结果,那就太好了。
注意:这需要适用于大型数据集。
例子:
dt <-
data.table(d = c(0.00, 988.36, 0.00, 2031.46, 0.00),
c = c(0.00, 30.00, 0.00, 2031.46, 0.00),
n = c("a", "b", "a", "a", "b"))
dt[, diff := d - c]
dt[, abs_diff := abs(diff)]
dt[, pct_diff := mean(abs_diff == 0, na.rm = TRUE), by = "n"]
最后一步是问题所在,因为我不断根据阈值获得 pct_diff 的不同数字。 (例如,mean(abs_diff <= 1e-10) 和 mean(abs_diff <= 1e-15) 给了我不同的答案)。
【问题讨论】:
-
您应该提供某种形式的reproducible example,以便更清楚地了解发生了什么。
-
你能举一些例子和你想要的输出吗?我既不完全理解
exactly 0的意思,也不完全理解您的舍入过程。何时正确存储数字?正确的区别是什么? -
当然 - 我可以添加一个示例。
-
您发布的示例中的结果对我来说看起来很正常。他们怎么了?此外,您不应该比较浮点值。您的数据真的关心差异是 10^-10 还是正好 0?
-
我不在乎数据是否有细微差别——我只是想正确地捕捉差异。我想将它们与 0.01 值进行比较。我只是想以最准确的方式捕捉到这一点——根据我使用的方法,我不断得到不同的答案。
标签: r number-formatting