format.Date runs into trouble long before Inf: > as.Date("2018-03-05") + c(2147466052, 2147466053) [1] "5881580-07-11" "-5877641-06-23"
Bill Dunlap TIBCO Software wdunlap tibco.com On Tue, Mar 5, 2019 at 2:33 PM Gabriel Becker <gabembec...@gmail.com> wrote: > Richard, > > Well others may chime in here, but from a mathematical point of view, the > concept of "infinite days from right now" is well-defined, so it maybe a > "valid" date in that sense, but what day and month it will be (year will be > Inf) are indeterminate/not well defined. Those are rightfully, NA, it > seems? > > I mean you could disallow dates to take Inf at all, ever. I don't feel > strongly one way or the other about that, personally. That said, if inf > dates are allowed, its not clear to me that displaying the "Formatted" date > string as NA, even if the value isn't, is wrong given it can't be > determined for that "date" is. It could be displayed differently, I > suppose, but all the ones I can think of off the top of my head would be > problematic and probably break lots of formatted-dates parsing code out > there in the wild (and in R, I would guess). Things like displaying > "Inf-NA-NA", or just "Inf". Neither of those are going to handle a > read-write round-trip well, I think. > > So my personal don't-really-have-a-hat-in-the-ring opinion would be to > either leave it as is, or force as.Date(Inf, bla) to actually be NA. > > Best, > ~G > > On Tue, Mar 5, 2019 at 12:06 PM Richard White <w...@rwhite.no> wrote: > > > Hi, > > > > I think I've discovered a bug in base R. > > > > Basically, when using 'Inf' as as 'Date', is is visually displayed as > > 'NA', but R still treats it as 'Inf'. So it is very confusing to work > > with, and can easily lead to errors: > > > > # Visually displays as NA > > > as.Date(Inf, origin="2018-01-01") > > [1] NA > > > > # Visually displays as NA > > > str(as.Date(Inf, origin="2018-01-01")) > > Date[1:1], format: NA > > > > # Is NOT NA > > > is.na(as.Date(Inf, origin="2018-01-01")) > > [1] FALSE > > > > # Is still Inf > > > is.infinite(as.Date(Inf, origin="2018-01-01")) > > [1] TRUE > > > > This gets really problematic when you are collapsing dates over groups > > and you want to find the first date of a group. Because min() returns > > Inf if there is no data: > > > > # Visually displays as NA > > > as.Date(min(), origin="2018-01-01") > > [1] NA > > Warning message: In min() : no non-missing arguments to min; returning > Inf > > > > # Visually displays as NA > > > str(as.Date(min(), origin="2018-01-01")) > > Date[1:1], format: NA > > Warning message: In min() : no non-missing arguments to min; returning > Inf > > > > # Is not NA > > > is.na(as.Date(min(), origin="2018-01-01")) > > [1] FALSE > > Warning message: In min() : no non-missing arguments to min; returning > Inf > > > > # This is bad! > > > as.Date(min(), origin="2018-01-01") > "2018-01-01" > > [1] TRUE > > Warning message: In min() : no non-missing arguments to min; returning > Inf > > > > Here is my sessionInfo(): > > > > > sessionInfo() > > R version 3.5.0 (2018-04-23) > > Platform: x86_64-pc-linux-gnu (64-bit) > > Running under: Debian GNU/Linux 9 (stretch) > > Matrix products: default > > BLAS: /usr/lib/openblas-base/libblas.so.3 > > LAPACK: /usr/lib/libopenblasp-r0.2.19.so > > > > locale: > > [1] LC_CTYPE=C.UTF-8 LC_NUMERIC=C LC_TIME=C.UTF-8 LC_COLLATE=C.UTF-8 > > LC_MONETARY=C.UTF-8 > > [6] LC_MESSAGES=C LC_PAPER=C.UTF-8 LC_NAME=C LC_ADDRESS=C LC_TELEPHONE=C > > [11] LC_MEASUREMENT=C.UTF-8 LC_IDENTIFICATION=C > > > > attached base packages: > > [1] stats graphics grDevices utils datasets methods base loaded via a > > namespace (and not attached): > > [1] compiler_3.5.0 tools_3.5.0 yaml_2.1.19 > > > > > Sys.getlocale() > > [1] > > > > > "LC_CTYPE=C.UTF-8;LC_NUMERIC=C;LC_TIME=C.UTF-8;LC_COLLATE=C.UTF-8;LC_MONETARY=C.UTF-8;LC_MESSAGES=C;LC_PAPER=C.UTF-8;LC_NAME=C;LC_ADDRESS=C;LC_TELEPHONE=C;LC_MEASUREMENT=C.UTF-8;LC_IDENTIFICATION=C" > > > > ______________________________________________ > > R-devel@r-project.org mailing list > > https://stat.ethz.ch/mailman/listinfo/r-devel > > > > [[alternative HTML version deleted]] > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel > [[alternative HTML version deleted]] ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel