我无法理解以下剪切行为。
> 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] 应该有 1 个元素 (.6) 而不是 0。同样,区间 (0.6,0.9] 应该只有 1 个元素而不是 2。
我哪里错了。
最佳答案
这与 seq
生成的数字中的一个轻微错误有关:
> data[4] - 0.6
[1] 1.110223e-16
从中,您可以看到 data[4]
比 0.6
稍大,因此它会上升到下一个存储桶。
其原因是因为并非所有数字都可以在任何不具有无限存储空间的编码方案中精确表示。您所能期望的最好结果就是足够接近的近似值。在本例中,阶数为 10-1 的值的 10-16 误差很小,但非零。
关于r - 了解剪切输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29406868/