> This is a workaround, and could be the basis for a round.Date improvement:
>   date <- Sys.Date()
>   as.Date(round(as.POSIXct(date), "years"))
>   as.Date(round(as.POSIXct(Sys.Date() + 180), "years"))
> Duncan Murdoch

That would work, perhaps structured similarly as `trunc.Date` is.
The only issue might be that `trunc.Date` is currently using `round.Date`
in its numeric form likely to prevent ?expensive? conversion to POSIXt when it is not required.

> trunc.Date
> function (x, units = c("secs", "mins", "hours", "days", "months",
>     "years"), ...)
> {
>    units <- match.arg(units)
>    if (units == "months" || units == "years")
>        as.Date(trunc.POSIXt(x, units, ...))
>    else round(x - 0.4999999)
> }

Perhaps the working version of `round.Date` could be:

  round.Date = function(x, units = c("secs", "mins", "hours", "days", "months", "years")){
    units = match.arg(units)

    if (units == "months" || units == "years")
      as.Date(round.POSIXt(x, units, ...))
    else .Date(round(as.numeric(x)))
  }

Or perhaps `unclass` instead of `as.numeric`. Since the default `units` for round(x) evaluates to `sec`, this should correctly skip the first condition in `round` and get to the correct numeric
rounding.

Perhaps the `trunc.Date` should be modified as well so that the call to `round.Date` is skipped in favour of internal `round.numeric`, saving few cycles.

-- Jirka

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to