15

我正在使用 cut 函数为条形图直方图准备数据,但在我的标签和中断之间不断遇到看似不一致的情况:

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]

编辑:

根据@thelatemail 和@Josh O'Brien 的建议,我将代码更改为此,一切正常。 cut(sample(1:100000, 500, T),breaks=sq,labels=sprintf("$%.0f",sq[-1]))

4

1 回答 1

31

使用cut(), 11 个中断分隔 10 个级别,这将只需要 10 个标签。该"labels/breaks length conflict"错误告诉您调用为参数sprintf()提供了太多标签labels=

在代码中:

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

length(breaks)
# [1] 11
length(levels(cut(breaks, sq)))
# [1] 10
于 2012-10-25T04:58:28.947 回答