2012-10-25 11 views
8

カットやラベル/休憩長の競合

Error in cut.default(sample(1:1e+05, 500, T), breaks = sq, labels = sprintf("$%.0f", : labels/breaks length conflict

ここでは一例です。私はそれが収入データであると思って、$ 10,000のビンで0〜$ 100,000のシーケンスを使用します。私は同じ変数を使用して、ブレークとラベルの両方を生成し、ラベル側で軽度のフォーマッティングを行います。文字ベクトルと比較したときに何らかの理由で長さが違うかもしれないと思ったが、同じ長さを持つように見える。

> sq<-seq(0,100000,10000) 
> cut(sample(1:100000, 500, T),breaks=sq,labels=sprintf("$%.0f",sq)) 
> length(sprintf("$%.0f",sq)) 
[1] [11] 
> length(sq) 
[1] [11] 

EDIT:@thelatemailと@Joshオブライエンの提案パー

、私はこれにコードを変更し、物事は作業の順序です。 cut(sample(1:100000, 500, T),breaks=sq,labels=sprintf("$%.0f",sq[-1]))

+1

'長さ(テーブル(カット(サンプル(1:100000、500、T)は、= SQを破壊する)))'あなたのミスマッチしたがって、 '10'です。 – thelatemail

+0

最終結果がヒストグラムになる場合は、単に 'breaks'パラメータを' hist() '関数に使うのはなぜですか? –

+0

それは私がやったことです。しかし、なぜ私が「カット」の問題をすべて解決することができなかったのか不思議でした。 – ako

答えて

18

cut()では、11個の区切りで10レベルの区切りがあり、10個のラベルしか必要としません。 "labels/breaks length conflict"エラーがsprintf()への呼び出しがlabels=引数に1つのあまりにも多くのラベルを供給していることを語っています。コードで

breaks <- 0:10/10 
dat <- runif(1e4) 

length(breaks) 
# [1] 11 
length(levels(cut(breaks, sq))) 
# [1] 10 
+2

すてきでクリアです。驚くべきことに、[ 'カットのためにそれほど明確なDOC()'](https://stat.ethz.ch/R-manual/R-devel/library/base/html/cut.html)言っていませんどこでも* "breaksがベクトルの場合、' labels'は長さが 'breaks'よりも小さいベクトルでなければなりません" *。私はドキュメンタリーが来るのを感じる。 – smci