Я подозреваю, что это проблема округления / с плавающей запятой:
Browse[2]> print(head(as.numeric(order.by)), digits = 20)
[1] 1332234170.0009999275 1332234170.0009999275 1332234170.0009999275
[4] 1332234170.0009999275 1332234170.0009999275 1332234170.0009999275
Это было достигнуто путем отладки xts()
при вызове
foo <- xts(1:180, rep(as.POSIXlt("2012-03-20 09:02:50.001"), 180),
unqiue = FALSE)
, но вы можете увидеть проблемуявно через
> print(as.numeric(as.POSIXlt("2012-03-20 09:02:50.001")))
[1] 1332234170
> print(as.numeric(as.POSIXlt("2012-03-20 09:02:50.001")), digits = 20)
[1] 1332234170.0009999275
Указывая, что ваше дробное количество секунд не может быть создано или сохранено в точности .001
миллисекунд.Принимая во внимание, что усечение до 3 дп сохранит .002
, поскольку оно сохраняется как:
> print(as.numeric(as.POSIXlt("2012-03-20 09:02:50.002")), digits = 20)
[1] 1332234170.0020000935
Усечение или округление до 3 дп сохранит часть .002
.Одна из проблем, с которой вам приходится сталкиваться при работе с компьютерами.
Обратите внимание, что это, похоже, проблема в напечатанном представлении дат индекса:
> print(as.numeric(index(foo)[1]), digits = 20)
[1] 1332234170.0009999275
Точность (с проблемами с плавающей запятой) сохраняется в реальном объекте, хранящем времена индекса - вы просто не можете увидеть это при печати времени на консоль.