2013-07-12 88 views
1

這兩個爲什麼不會返回相同的結果?爲什麼R不像預期的那樣削減工作?

D = data.frame(x=c(0.6)) 

    D$binned = cut(D$x, seq(0.50,0.70,0.025), include.lowest=TRUE, right=FALSE) 
    D # 0.6 is binned correctly as [0.6,0.625) 

    D$binned = cut(D$x, seq(0.55,0.65,0.025), include.lowest=TRUE, right=FALSE) 
    D # 0.6 is binned incorrectly as [0.575,0.6) 
+0

變上http://stackoverflow.com/q/9508518/892313 –

回答

1

D$binned = cut(D$x, round(seq(0.55,0.65,0.025),3), include.lowest=TRUE, right=FALSE)

D

x binned

1 0.6 [0.6,0.625)

5

表示錯誤。數字的浮點逼近只有在數字是某些冪的組合時纔是精確的。其他數字映射到這些數字。產生數字的不同算法可能以不同的方式進行,並且具有與它們相關的不同錯誤(即高於或低於期望值)。在這種情況下:

print(D$x,digits=22) 
[1] 0.5999999999999999777955 
print(seq(0.5,0.7,0.025)[5],digits=22) 
[1] 0.5999999999999999777955 
> print(seq(0.55,0.65,0.025)[3],digits=22) 
[1] 0.6000000000000000888178 
+0

呵呵。好的,酷 - 有什麼辦法使它像預期的那樣? – baixiwei

+0

不幸的是,並不是真的。錯誤是一致的,但最終的價值取決於它是如何計算的。處理這種情況的通常方式是隻考慮在一定的容忍度內的平等,然而'剪切'需要尖銳的突破點。 – James

+0

然而,如果你的數字總是隻有小數點,你可能會相應地觸發斷點(例如'seq(0.55,0.65,0.025) - 0.000001'),看看是否有幫助 – Aaron

相關問題