[Rd] round.Date and trunc.Date not working / implemented
Jiří Moravec
j|r|@c@mor@vec @end|ng |rom gm@||@com
Thu Feb 8 22:54:30 CET 2024
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"
More information about the R-devel
mailing list