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、カット ポイントをフォーマット (丸め) する前に間隔を選択したように見えることです。これは、2 番目の間隔を選択するが、指定されたカット ポイント (最後の行で確認できる) に従って最初の間隔を選択するという例では、一貫性のない動作につながります。

私のパッケージには 2 つの関数があるため、これは私にとって問題です。上記の例では、同じデータ ポイントが最初の関数の 2 番目の間隔に配置されますが、2 番目の関数の最初の間隔に配置されます。まったく同じカット ポイントが表示されます。これにより、パッケージで奇妙な動作が発生する可能性があります。

私の質問
これは既知の問題ですか? はいの場合、回避策はありますか?ありがとうございました

編集
小数点以下の桁数を変更できることはわかっていますが、小数点以下の桁数がdig.lab多いカットポイントがあると同じ問題が発生します。上記の例は、より一般的な問題のデモンストレーションにすぎません!

4

1 に答える 1

0

のソースコードを見たところ、回避策の1つは、関数を呼び出す前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 に答える