Apologies then. I was using R version 4.1.2 (Bird Hippie) and looks like someone implemented a better trunc.Date version in the meantime.

# v4.1.2
> trunc.Date
function (x, ...)
round(x - 0.4999999)
<bytecode: 0x56138c284de0>
<environment: namespace:base>

# Unstable (2024-02-07 r85873)
> 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)
}
<bytecode: 0x565254ea8398>
<environment: namespace:base>


And I was looking towards my first contribution. :(
Well, its on me for not checking the dev version before writing email and using something that is 3 years out of date.

Look like the change did not affected `round.Date`. In both versions it is still not accepting `units` and instead treating `Date(...)` as numeric.

Would similar treatment for `round.Date` be desirable? And perhaps `floor` and `ceiling` (rounding up)? I found it useful when plotting (although axis.Date and prettyDate did solved some issues). Although

-- Jirka


On 9/02/24 03:15, Martin Maechler wrote:
Jiří Moravec
     on Wed, 7 Feb 2024 10:23:15 +1300 writes:
     > This is my first time working with dates, so if the answer is "Duh, work
     > with POSIXt", please ignore it.

     > Why is not `round.Date` and `trunc.Date` "implemented" for `Date`?

     > Is this because `Date` is (mostly) a virtual class setup for a better
     > inheritance or is that something that is just missing? (like
     > `sort.data.frame`). Would R core welcome a patch?

     > I decided to convert some dates to date using `as.Date` function, which
     > converts to a plain `Date` class, because that felt natural.

     > But then when trying to round to closest year, I have realized that the
     > `round` and `trunc` for `Date` do not behave as for `POSIXt`.

     > I would assume that these will have equivalent output:

     > Sys.time() |> round("years") # 2024-01-01 NZDT

     > Sys.Date() |> round("years") # Error in round.default(...): non-numeric
     > argument to mathematical function


     > Looking at the code (and reading the documentation more carefully) shows
     > the issue, but this looks like an omission that should be patched.

     > -- Jirka

You are wrong:  They *are* implemented,
both even visible since they are in the 'base' package!

==> they have help pages you can read ....

Here are examples:

trunc(Sys.Date())
[1] "2024-02-08"
trunc(Sys.Date(), "month")
[1] "2024-02-01"
trunc(Sys.Date(), "year")
[1] "2024-01-01"

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

Reply via email to