0

我遇到了以下不一致的行为,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但如果您有更多小数位的切点,则会出现同样的问题。上面的例子只是一个更一般问题的演示!

4

1 回答 1

0

我刚刚查看了源代码,我认为一种解决方法是在调用函数之前cut.default应用应用于打印输出的相同格式:breakscut

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]

那么至少一切都是一致的(所以在这种情况下,在这两种情况下都选择了第一个间隔)。

然而,这只适用于您明确设置切割点的情况!

于 2016-06-18T17:28:14.003 回答