I am working with the cut function to prep data for a barplot histogram but keep running into a seeming inconsistency between my labels and breaks:
Error in cut.default(sample(1:1e+05, 500, T), breaks = sq, labels = sprintf("$%.0f", :
labels/breaks length conflict
Here is an example. I pretend that it is income data, using a sequence of 0 to $100,000 in bins of $10,000. I use the same variable to generate both breaks and labels, with minor formating on the label side. I thought they might for some reason have different lengths when comparing to a character vector, but they appear to have the same length, still.
> 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 and @Josh O'Brien's suggestions, I changed the code to this and things are in working order.
cut(sample(1:100000, 500, T),breaks=sq,labels=sprintf("$%.0f",sq[-1]))
With cut()
, 11 breaks delimit 10 levels which will require only 10 labels. The "labels/breaks length conflict"
error is telling you that the call to sprintf()
is supplying one too many labels to the labels=
argument.
In code:
breaks <- 0:10/10
dat <- runif(1e4)
length(breaks)
# [1] 11
length(levels(cut(breaks, sq)))
# [1] 10