`cut` 的不一致行为:具有相同数量和相同显示切割点的不同间隔
Inconsistent behaviour of `cut`: Different intervals with same number and same displayed cut points
我遇到了 cut
的以下不一致行为,这让我很头疼:
x <- 0.2316
cut(x, c(0, 0.2315, 10)) #gives 0.232 as cutpoint and choses second interval
## [1] (0.232,10]
## Levels: (0,0.232] (0.232,10]
cut(x, c(0, 0.232, 10)) #choses first interval when taking the same cutpoint it just gave (0.232)
## [1] (0,0.232]
## Levels: (0,0.232] (0.232,10]
问题是 cut
似乎在格式化(舍入)切割点之前选择了间隔。这导致示例中的行为不一致,它选择了第二个间隔,但会根据给定的切割点(可以在最后一行中看到)选择第一个间隔。
这对我来说是个问题,因为我的程序包中有两个功能:一个是计算分割点,第二个是确定放置新数据点的正确间隔。在上面的示例中,相同的数据点在第一个函数中被放入第二个区间,但在第二个函数中被放入第一个区间 - 显示完全相同的切割点!这可能会导致我的包裹出现一些奇怪的行为!
我的问题
这是一个已知的问题?如果是,是否有任何解决方法?谢谢
编辑
我知道您可以使用 dig.lab
更改小数位数,但如果您的切点具有更多小数位,则会出现同样的问题。上面的例子只是一个更普遍的问题的演示!
我刚刚查看了 cut.default
的源代码,我认为一种解决方法是在调用 cut
函数:
breaks <- as.numeric(formatC(0 + c(0, 0.2315, 10), digits = 3, width = 1L))
cut(x, breaks = breaks)
## [1] (0,0.232]
## Levels: (0,0.232] (0.232,10]
那么至少一切都是一致的(所以在这种情况下,两种情况都选择第一个间隔)。
然而,这仅在您明确设置分割点的情况下有效!
我遇到了 cut
的以下不一致行为,这让我很头疼:
x <- 0.2316
cut(x, c(0, 0.2315, 10)) #gives 0.232 as cutpoint and choses second interval
## [1] (0.232,10]
## Levels: (0,0.232] (0.232,10]
cut(x, c(0, 0.232, 10)) #choses first interval when taking the same cutpoint it just gave (0.232)
## [1] (0,0.232]
## Levels: (0,0.232] (0.232,10]
问题是 cut
似乎在格式化(舍入)切割点之前选择了间隔。这导致示例中的行为不一致,它选择了第二个间隔,但会根据给定的切割点(可以在最后一行中看到)选择第一个间隔。
这对我来说是个问题,因为我的程序包中有两个功能:一个是计算分割点,第二个是确定放置新数据点的正确间隔。在上面的示例中,相同的数据点在第一个函数中被放入第二个区间,但在第二个函数中被放入第一个区间 - 显示完全相同的切割点!这可能会导致我的包裹出现一些奇怪的行为!
我的问题
这是一个已知的问题?如果是,是否有任何解决方法?谢谢
编辑
我知道您可以使用 dig.lab
更改小数位数,但如果您的切点具有更多小数位,则会出现同样的问题。上面的例子只是一个更普遍的问题的演示!
我刚刚查看了 cut.default
的源代码,我认为一种解决方法是在调用 cut
函数:
breaks <- as.numeric(formatC(0 + c(0, 0.2315, 10), digits = 3, width = 1L))
cut(x, breaks = breaks)
## [1] (0,0.232]
## Levels: (0,0.232] (0.232,10]
那么至少一切都是一致的(所以在这种情况下,两种情况都选择第一个间隔)。
然而,这仅在您明确设置分割点的情况下有效!