既然您在这里询问可能导致错误的原因是:
hist.default 函数计算直方图的中点时会产生错误。这个向量mids <- 0.5 * (breaks[-1L] + breaks[-nB]) 计算每次休息之间的中点。问题的出现是因为中断是作为整数生成的:
如果参数breaks 是numeric 和length == 1,则hist.default 函数(由hist.POSIXt 调用)基于x 的范围和数字创建breaks 的向量的休息。这是使用pretty 命令完成的。由于我没有仔细研究过的原因,如果breaks 足够小以至于pretty(range(x),n=breaks, min.n = 1) 只返回每个值中的一个,例如:
pretty(range(x), n = 35, min.n = 1)
#[1] 1392121179 1392121180 1392121181 1392121182 1392121183 1392121184
#[7] 1392121185 1392121186 1392121187 1392121188 1392121189 1392121190
#[13] 1392121191 1392121192 1392121193 1392121194 1392121195 1392121196
#[19] 1392121197 1392121198 1392121199 1392121200 1392121201 1392121202
#[25] 1392121203 1392121204
那么输出是integer 类型。但是,如果中断数较大并且某些输出重复:
pretty(range(x), n = 36, min.n = 1)
# [1] 1392121179 1392121180 1392121180 1392121181 1392121181 1392121182
# [7] 1392121182 1392121183 1392121183 1392121184 1392121184 1392121185
#[13] 1392121185 1392121186 1392121186 1392121187 1392121187 1392121188
#[19] 1392121188 1392121189 1392121189 1392121190 1392121190 1392121191
#[25] 1392121191 1392121192 1392121192 1392121193 1392121193 1392121194
#[31] 1392121194 1392121195 1392121195 1392121196 1392121196 1392121197
#[37] 1392121197 1392121198 1392121198 1392121199 1392121199 1392121200
#[43] 1392121200 1392121201 1392121201 1392121202 1392121202 1392121203
#[49] 1392121203 1392121204 1392121204
那么输出是numeric。
因为 R 使用 32 位整数类型并且 POSIXt 整数是大数,所以添加两个 POSIXt 整数会导致 R 无法处理并返回 NA 的溢出。当pretty 返回数字时,这不是问题。
另请参阅:What is integer overflow in R and how can it happen?
实际上,这意味着,如果您打印出返回的hist 结构,您的所有mids 值都将是NA,但我认为它实际上不会影响直方图的绘制。因此,这只是一个警告。
编辑:
pretty 内部使用seq.int