【问题标题】:What is the point of include.lowest argument in hist?hist 中 include.lowest 参数的意义何在?
【发布时间】:2018-04-26 12:06:25
【问题描述】:

在用于绘制直方图的hist 函数中,有一个参数include.lowest,默认值为TRUE。

据我了解,当中断设置为向量时,此参数应该允许保留或不保留最低中断的最低界限。

但如果我尝试,作为一个纯人为的例子,像这样的命令:

 hist(c(1:100), breaks=c(1,2,10,50,100), include.lowest=FALSE)

我只是得到一个错误:

Error in hist.default(c(1:100), breaks = c(1, 2, 10, 50, 100), include.lowest = FALSE) : 
  some 'x' not counted; maybe 'breaks' do not span range of 'x'

这里发生的情况是 hist 不允许绘制不考虑完整数据 (x) 的图。如果 include.lowest 为 false,我的数据中的值“1”不会出现在直方图中的任何位置。但是既然如此,那么 include.lowest 是做什么用的呢?我看不到任何将其设置为 false 会产生任何影响而不触发错误的情况。

注意:在我的解释中,我假设我保留默认的right=TRUE,但如果right=FALSE,我应该只是最高突破而不是最低的相同行为,对吧?所以我认为它不会改变任何东西。

更多背景信息:我们正在开发一个使用 R 绘制图形的图形界面(它将成为 R++ 的一部分,当然,它会很棒)。当我们为所有直方图参数提供工具时,我们被困在了那个工具上。如果它对任何事情都没有用,只是一些旧的 hist 版本的遗留物,我们不妨不包括它,但如果它真的有用,我们也不想忘记它。

感谢大家的关注。

【问题讨论】:

  • 在我看来它只是被留下了,因为为直方图进行分箱的 C 函数需要该参数。在hist.default 中进行分箱后会进行检查,以查看计数与观察次数的总和,这意味着您不能在不引发错误的情况下计数;所以我想不出设置include.lowest = FALSE 会改变直方图中的任何内容并且不会引发错误的场景,如你所说。

标签: r histogram


【解决方案1】:

我不确定你在问什么。我假设您是在询问 include.lowest = FALSEhist 中的行为,以及为什么它会在您的示例中产生错误。

这与数据的分箱方式有关。让我们看一下cut,因为这个功能与hist的作用密切相关。

cut(1:100, breaks = c(1, 2, 10, 50, 100))
#  [1] <NA>     (1,2]    (2,10]   (2,10]   (2,10]   (2,10]   (2,10]   (2,10]
#  [9] (2,10]   (2,10]   (10,50]  (10,50]  (10,50]  (10,50]  (10,50]  (10,50]
# [17] (10,50]  (10,50]  (10,50]  (10,50]  (10,50]  (10,50]  (10,50]  (10,50]
# [25] (10,50]  (10,50]  (10,50]  (10,50]  (10,50]  (10,50]  (10,50]  (10,50]
# [33] (10,50]  (10,50]  (10,50]  (10,50]  (10,50]  (10,50]  (10,50]  (10,50]
# [41] (10,50]  (10,50]  (10,50]  (10,50]  (10,50]  (10,50]  (10,50]  (10,50]
# [49] (10,50]  (10,50]  (50,100] (50,100] (50,100] (50,100] (50,100] (50,100]
# [57] (50,100] (50,100] (50,100] (50,100] (50,100] (50,100] (50,100] (50,100]
# [65] (50,100] (50,100] (50,100] (50,100] (50,100] (50,100] (50,100] (50,100]
# [73] (50,100] (50,100] (50,100] (50,100] (50,100] (50,100] (50,100] (50,100]
# [81] (50,100] (50,100] (50,100] (50,100] (50,100] (50,100] (50,100] (50,100]
# [89] (50,100] (50,100] (50,100] (50,100] (50,100] (50,100] (50,100] (50,100]
# [97] (50,100] (50,100] (50,100] (50,100]
#Levels: (1,2] (2,10] (10,50] (50,100]

注意 1 如何被“放置”在 bin NA 中。这是因为 bin 是开闭区间,例如(1, 2] 表示1排除,而2包含

所以回到hist,下面使用include.lowest = FALSE时不会报错

hist(1:100, breaks = c(0, 2, 10, 50, 100), include.lowest = FALSE)

澄清(基于@MikkoMarttila 的评论):在histinclude.lowest = FALSE 中分箱是您期望在R 中使用例如标准分箱的默认行为。 cut。因此包含设置include.lowest = FALSE 的选项以与cut 及其默认的开闭间隔保持一致。大多数情况下,在绘制直方图时,您需要一个区间,其中最小值是区间的一部分(使用开闭区间时不会出现这种情况),因此默认为 include.lowest = TRUE

【讨论】:

  • 我认为 OP 是在询问是否有任何理由让人们想要使用 include.lowest = FALSE
  • @MikkoMarttila 您的问题的答案在我的回答中:include.lowest = FALSE 是您在 R 中使用例如标准分箱时所期望的默认行为。 cut。所以我想它是为了与cut 保持一致而包含在内的。大多数情况下,您需要一个最小值是该区间一部分的区间(典型的开闭区间不会出现这种情况),因此默认情况下是 include.lowest = TRUE。有意义吗?
  • 确实:并且该参数在cut 中具有有效用途(不会引发错误)。但是,在hist 中将其设置为FALSE 的唯一效果是导致错误消息,对吧?我想断言您正在绘制的数据是严格正数的假设可能很有用?
  • @MikkoMarttila 正如我所说,我认为include.lowest = FALSE 对于确保与cut 的结果保持一致至关重要。例如,如果你想从hist返回对象中提取细节,并将它们映射到用cut计算的区间;或将histtable(cut(...)) 的结果进行比较时。
  • 感谢两位的回答。它证实了我的部分想法,并帮助我更好地理解与cut 的链接。如果你很好奇,并且作为讨论的结果,我认为我们不会在我们的图形界面中提供对 include.lowest 参数的访问,尽管用户总是可以手动编辑生成的原始代码是他/她所希望的(例如将结果与table(cut(...)) 进行比较)。
猜你喜欢
  • 2016-12-22
  • 2017-04-03
  • 2018-10-24
  • 2018-06-03
  • 1970-01-01
  • 1970-01-01
  • 2020-06-16
  • 1970-01-01
  • 2015-07-03
相关资源
最近更新 更多