2012-10-25 9 views
8

sto lavorando con la funzione di taglio per preparare i dati per un istogramma barplot ma continuare a correre in una contraddizione apparente tra le mie etichette e pause:Cut ed etichette/lunghezza pause conflitto

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

Ecco un esempio . Faccio finta che si tratti di dati sul reddito, utilizzando una sequenza da 0 a $ 100.000 in contenitori di $ 10.000. Io uso la stessa variabile per generare sia le rotture che le etichette, con una formattazione minore sul lato dell'etichetta. Ho pensato che potrebbero per qualche ragione avere lunghezze diverse rispetto a un vettore di caratteri, ma sembrano avere la stessa lunghezza, ancora.

> 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:

Per @thelatemail e suggerimenti di @Josh O'Brien, ho cambiato il codice per questo e le cose sono in ordine. cut(sample(1:100000, 500, T),breaks=sq,labels=sprintf("$%.0f",sq[-1]))

+1

'lunghezza (tabella (cut (campione (1: 100000, 500, T), pause = sq)))' è '10' e di conseguenza della mancata corrispondenza. – thelatemail

+0

Se il risultato finale sarà un istogramma, perché non usi semplicemente il parametro 'breaks' sulla funzione' hist() '? –

+0

Questo è quello che ho finito per fare. Ma ero curioso di sapere perché non riuscivo a risolvere lo stesso problema. – ako

risposta

18

Con cut(), 11 interruzioni delimitano 10 livelli che richiedono solo 10 etichette. L'errore "labels/breaks length conflict" ti dice che la chiamata a sprintf() sta fornendo troppe etichette all'argomento labels=.

In codice:

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

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

Bello e chiaro. Sorprendentemente, il [non-così-chiaro documento per 'cut()'] (https://stat.ethz.ch/R-manual/R-devel/library/base/html/cut.html) non dice ovunque * "se' breaks' è un vettore, quindi 'labels' deve essere un vettore con una lunghezza inferiore a' breaks' "*. Sento che arriva un docbug. – smci