2016-06-18 5 views
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つの機能があるため、私にとっては問題です.1つはカットポイントを計算し、もう1つは新しいデータポイントを配置する正しい間隔を決定することです。上記の例では、同じデータポイントが第1の関数の第2の間隔に入れられますが、第2の関数の最初の間隔に入れられます。全く同じカットポイントが表示されます。それは私のパッケージにいくつかの奇妙な動作につながることができます!

私の質問
これは既知の問題ですか?はいの場合は回避策がありますか?あなた


私はあなたがより多くの小数点以下の桁数でカットポイントを持っていた場合は、まだ同じ問題が発生するdig.labで小数点以下の桁数を変更することができることを知っている編集
をありがとうございます。上記の例は、より一般的な問題のデモンストレーションです!

+1

カットポイントの桁数を増やしたいですか?これは 'cut(x、c(0、0.2315、10)、dig.lab = 4)'になります。 – lukeA

+0

@lukeA:わかっていますが、小数点以下の桁数をカットポイントとして使用した場合、同じ問題が小数点以下1桁も発生します。上記は単なる例示である! – vonjd

+0

@lukeA:私の編集をご覧ください。 – vonjd

答えて

0

私はちょうどcut.defaultのソースコードを見ていたし、私は1つの回避策がcut関数を呼び出す前breaksにプリントアウトの上に適用されているのと同じ書式を適用することだと思う。そして、

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] 

を少なくともすべてが一貫しています(この場合、最初の間隔がどちらの場合でも選択されます)。

これは、カットポイントを明示的に設定する場合にのみ機能します。

関連する問題