Skip to content

In split_period, why not use lubridate::as.period instead of lubridate::seconds_to_period? #288

@jerlev

Description

@jerlev

I'm trying to understand what appears to be a limitation of tsibble. The function tsibble:::split_period is used for example by tsibble:::interval_pull.POSIXt, to handle objects of base class difftime:

# Excerpts from tsibble/R/interval.R

split_period <- function(x) {
  output <- seconds_to_period(x)
  list(
    year = output$year, month = output$month, day = output$day,
    hour = output$hour, minute = output$minute, second = output$second
  )
}

#' @export
# Assume date is regularly spaced
interval_pull.POSIXt <- function(x) {
  dttm <- as.double(x)
  nhms <- gcd_interval(dttm)
  period <- split_period(nhms)
  new_interval(
    hour = period$hour,
    minute = period$minute,
    second = period$second %/% 1,
    millisecond = (period$second %% 1 * 1e3) %/% 1,
    microsecond = (period$second %% 1 * 1e3) %% 1 * 1e3
  )
}

In order to transform the base difftime object as a lubridate period object, split_period calls lubridate::seconds_to_period. This assumes that the difftime object will return a number in seconds once cast as a double. However that assumption seems to fail for any difftime object equal to, or longer than one minute. Is that right? If so, why not use lubridate::as.period instead of lubridate::seconds_to_period?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions