2015-04-02 71 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