圆形数字如何存储在R中?

时间:2016-03-03 15:32:29

标签: r number-formatting

我在网上找到了很多这方面的信息,但我还没能找到任何完全回答我的问题。我的问题与数字的呈现无关,而是与演示文稿下的计算和存储有关。

问题在于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)给出了不同的答案)。

1 个答案:

答案 0 :(得分:2)

圆形数字存储为numeric,即浮点数:

class(round(1.1))
#[1] "numeric"

class(floor(1.1))
##[1] "numeric"

看起来您正在寻找支持任意精度数字的软件包,例如软件包Rmpfr。