R/fmt_seconds.R

Defines functions fmt_seconds

fmt_seconds <- function(time_in_sec, units = "auto", round_digits = 4) {
    # Given seconds, appropriately format time (seconds, miinutes, hours, ...)
    # 'units' parameter can be manually specified as one of 'seconds',
    # 'minutes', 'hours' or 'days', or the default is 'auto' whereby the units
    # will be automatically calcuated according to the size of the number
    # Returns a list. Example:
    #
    # elapsed_time = format_time_diff(50)
    # elapsed_time$value  # Numeric value of time difference 
    # elapsed_time$unit   # Unit of time difference (seconds, minutes, ...)
    #
    # Arguments:
    #   time_in_sec {numeric} -- time in seconds to format
    #
    # Keyword Arguments:
    #   units {char} -- desired output format, one of "seconds", "minutes", "hours",
    #                   "days" or "auto" (default: "auto")
    #   round_digits {numeric} -- number of digits to round $value to
    #
    # Returns:
    #   list -- $value {numeric}, $units {char}
    #
    
    if(units == "auto") {
      if(time_in_sec < 60) {
        time_diff = round(time_in_sec, round_digits)
        if(time_diff == 0) time_diff = round(time_in_sec, round_digits)
        time_measure = "seconds"
      } else if(time_in_sec >= 60 && time_in_sec < 3600) {
        time_diff = round(time_in_sec/60, round_digits)
        if(time_diff == 0) time_diff = round(time_in_sec/60, round_digits)
        time_measure = "minutes"
      } else if(time_in_sec >= 3600 && time_in_sec < 86400) {
        time_diff = round(time_in_sec/3600, round_digits)
        if(time_diff == 0) time_diff = round(time_in_sec/3600, round_digits)
        time_measure = "hours"
      } else {
        time_diff = round(time_in_sec/86400, round_digits)
        if(time_diff == 0) time_diff = round(time_in_sec/86400, round_digits)
        time_measure = "days"
      }

    } else if(units %in% c("seconds", "minutes", "hours", "days")) {
      time_measure = units
      if(units == "seconds") {
        time_diff = round(time_in_sec, round_digits)
      } else if(units == "minutes") {
        time_diff = round(time_in_sec/60, round_digits)
      } else if(units == "hours") {
        time_diff = round(time_in_sec/3600, round_digits)
      } else {  # Days
        time_diff = round(time_in_sec/86400, round_digits)
      }
        
    } else {
      stop("Invalid 'units' paramter. Must be one of 'auto', 'seconds', 'minutes', 'hours' or 'days'")
    }

    return(list(value = time_diff, units = time_measure))
}
tsouchlarakis/rdoni documentation built on Sept. 16, 2019, 8:53 p.m.