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