[Rd] Inconsistency of c.Date: non-commutativity and non-integer Value
Jens Heumann
jen@@heum@nn @end|ng |rom uzh@ch
Fri Jan 22 21:35:22 CET 2021
Dear r-devel,
Today I came across what I would call inconsistencies in the `c.Date`
method compared to what happens when concatenating other classes: 1.
Non-commutativity: The type in the arrangements of the elements does
matter (first element is critical), 2. the resulting value is numeric
instead of expected integer (as in the case with factors).
> ##
Examples####################################################################
> ## 1. Non-commutativity:
> c(.1, Sys.Date())
[1] 0.1 18649.0
> c(as.integer(.1), Sys.Date())
[1] 0 18649
> ## whereas:
> c(Sys.Date(), .1)
Error in as.Date.numeric(e) : 'origin' must be supplied
> c(Sys.Date(), as.integer(.1))
Error in as.Date.numeric(e) : 'origin' must be supplied
>
> ## 2. Numeric instead of numeric value
> str(c(as.integer(.1), Sys.Date()))
num [1:2] 0 18649 ## not integer
>
################################################################################
I'm not sure if `c.Date` should redefined, since there would probably be
many more classes to consider. However, the error message "'origin' must
be supplied" cannot be served by the user and appears to me like an
imperfection in the design.
It would be desirable if `c.Date` harmonizes with the hierarchy stated
in `?c`: "NULL < raw < logical < integer < double < complex < character
< list < expression. [...] factors are treated only via their internal
integer codes" and behaves best like a factor (and also throws integer
values as in 2. above).
Or maybe disabling non-dates at all `if (!all(sapply(list(Sys.Date(),
.1), "class") == "Date")) stop...`, but this is a little beyond my
knowledge.
Anyway, I hope my remark is of relevance and contributes to the
continuous development of our great programming language R!
Best,
Jens
More information about the R-devel
mailing list