了解切割输出

时间:2015-04-02 06:58:42

标签: r

我无法理解以下切割行为。

> data = seq(0,1,.2)
> data
[1] 0.0 0.2 0.4 0.6 0.8 1.0
> cuts = cut(data, c(0, 0.25, 0.5, .6, 0.9, Inf))
> summary(cuts)
  (0,0.25] (0.25,0.5]  (0.5,0.6]  (0.6,0.9]  (0.9,Inf]       NA's 
         1          1          0          2          1          1

根据我的理解,切割的间隔在右边关闭。因此,间隔(0.5,0.6)应该有一个元素(.6)而不是零。同样,间隔(0.6,0.9)应该只有1个元素而不是2个。

我哪里错了。

1 个答案:

答案 0 :(得分:2)

这与seq

生成的数字有轻微错误有关
> data[4] - 0.6
[1] 1.110223e-16

由此可以看出data[4]0.6略大,因此它会上升到下一个桶。

原因是因为并非所有数字都可以在任何没有无限存储空间的编码方案中准确表示。你能想到的最好的是足够接近。在这种情况下,对于10 -1 的值,10 -16 的误差是微小的,但是非零。