2015-04-02 42 views
2

我无法理解切割的下列行为。了解切割输出

> 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 

根据我的理解,cut制作的间隔在右边是封闭的。因此,该间隔(0.5,0.6]应该有一个元件(0.6),而不是零。类似地间隔(0.6,0.9]应该有1个元件代替2.

我在哪里错。

+1

检查'data [4]> 0.6'并阅读链接副本的答案。 – Roland 2015-04-02 07:06:29

回答

2

它与在数字略有误差由seq产生做:

> data[4] - 0.6 
[1] 1.110223e-16 

从这里,你可以看到data[4]是非常轻微比0.6大,因此它上升到下一桶

原因因为这不是所有的数字都可以完全用任何没有无限存储的编码方案表示。你所希望的最好的就是足够接近的近似值。在这种情况下,10 -1的值的误差为极小,但非零。

+0

如果你打算在低悬的水果中加入你的答案,你应该至少使它们的质量更高。这意味着解释浮点数精度。您可以在这里节省工作,因为已经有很好的答案。我建议你删除这个答案。 – Roland 2015-04-02 07:13:42

+1

@罗兰,我更新了更多的解释。我会_hope_你会删除否决票,因为这是_supposed_用于无益的答案。如果你不同意这个问题,你应该关闭(像你一样),并可能删除这个问题。我不会根据一个成员的说法删除答案,那些在一段时间后净负的答案确实被剔除,因为SO“群”比任何一个成员更适合判断。 – paxdiablo 2015-04-02 07:37:47

+1

我注意到,例如,http://stackoverflow.com/questions/11985799/converting-date-to-a-day-of-week-in-r/11985801#11985801,你有一个问题的答案是被关闭为愚蠢。所以我想你会删除,是吗? :-) – paxdiablo 2015-04-02 07:40:09