Jiří Moravec
2024-Feb-06 21:23 UTC
[Rd] round.Date and trunc.Date not working / implemented
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
Martin Maechler
2024-Feb-08 14:15 UTC
[Rd] round.Date and trunc.Date not working / implemented
>>>>> 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">