Cut and labels/breaks length conflict

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]))

Answers


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

Need Your Help

Best practice to create Custom UI framework in JavaScript

javascript html css frameworks

I want to create a custom UI framework in JavaScript for web applications (like Google Docs ui) (do not confuse with web application that deploy using languages like PHP, Python, etc.). However, af...

Convert form data to JavaScript object with jQuery

javascript jquery json serialization

How do I convert all elements of my form to a JavaScript object?