Час смазки не обрабатывает время хрон

Я пытаюсь извлечь час из chron времени в R. Справка для lubridate::hour говорит следующее:

Дата-время должна быть объектами POSIXct, POSIXlt, Date, Period, chron, yearmon, yearqtr, zoo, zooreg, timeDate, xts, its, ti, jul, timeSeries и fts.

Но, похоже, это не работает:

library(chron)
library(lubridate)
hour(chron(times. = "01:02:03"))

выдает ошибку

Error in as.POSIXlt.default(x, tz = tz(x)) : 
do not know how to convert 'x' to class “POSIXlt”

Это ошибка?

Я знаю, что вместо этого можно использовать chron::hours, что предпочтительнее в большинстве случаев. Но отчасти привлекательность lubridate заключается в том, что у него есть один набор функций для работы со всеми видами данных даты и времени, и необходимость везде менять hour на hours идет вразрез с этим.


person Frank    schedule 07.12.2015    source источник


Ответы (1)


Проблема в том, что tt ниже:

library(chron)
tt <- chron(times. = "01:02:03")
class(tt)
## [1] "times"

на самом деле не относится к классу "chron". Это класс "times".

1) Ему также нужна часть даты, чтобы она относилась к классу "chron", чтобы это работало:

library(lubridate)
hour(chron(0, tt))
## [1] 1

2) или:

hour(as.chron(tt)) # as.chron always produces a chron object
## [1] 1

3) Альтернативой без использования смазки является следующая, основанная на том факте, что хрон представляет день как 1, поэтому 1 час равен 1/24:

trunc(24 * as.numeric(tt))
## [1] 1
person G. Grothendieck    schedule 08.12.2015