【问题标题】:Understanding cut output [duplicate]了解切割输出[重复]
【发布时间】:2015-04-02 06:58:42
【问题描述】:

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

> 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] 应该有一个元素 (.6) 而不是 0。同样,区间 (0.6,0.9] 应该只有 1 个元素而不是 2。

我哪里错了。

【问题讨论】:

  • 检查data[4] > 0.6 并阅读链接副本的答案。

标签: r


【解决方案1】:

这与seq生成的数字中的轻微错误有关:

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

由此,您可以看到data[4]0.6 稍微大一点,因此它会上升到下一个桶。

原因是因为并非所有数字都可以在任何没有无限存储空间的编码方案中精确表示。您可以期望的最好结果是足够接近的近似值。在这种情况下,10-1 阶的值的 10-16 误差很小,但非零。

【讨论】:

  • 如果你的答案是低调的,你应该让它们至少是高质量的。这意味着解释浮点数精度。您可以在此处节省精力,因为副本已经有了很好的答案。我建议你删除这个答案。
  • @Roland,我已经更新了更多解释。我会希望您会删除反对票,因为这是应该用于无帮助的答案。如果您不同意问题, 您应该关闭(如您所愿)并可能删除该问题。我不会根据一位成员的说法删除答案,那些在一段时间后净为否定的答案确实会被剔除,因为 SO“swarm”比任何一位成员都更适合判断。
  • 我注意到,例如,stackoverflow.com/questions/11985799/…,您可以在其中找到一个已被关闭为欺骗的问题的答案。所以我想你会删除它,是吗? :-)
  • 我已经删除了我的反对票。但是,请注意,您在我的早期贡献中找到的示例是在问题被关闭前几个小时发布的(在不同的 SE 网站上),而您的答案(没有真正回答问题)是在这个问题被关闭后发布的.我实际上已经考虑过删除我的旧答案,因为我觉得它有些尴尬,但显然这种重复似乎很受欢迎,我不想删除基本的 R 解决方案而只留下包解决方案。
  • 对不起,@Roland,忍不住要打个招呼 :-) 我怀疑这个问题最终会被删除,或者可能合并,尽管如果问题本身可能有点不确定'不接近 exact 重复,但答案中只有很多交叉。无论如何,我们拭目以待。
猜你喜欢
  • 2020-05-08
  • 1970-01-01
  • 2014-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多