From emil@bode @ending from d@n@@kn@w@nl  Mon Jun 11 10:08:26 2018
From: emil@bode @ending from d@n@@kn@w@nl (Emil Bode)
Date: Mon, 11 Jun 2018 08:08:26 +0000
Subject: [Rd] 
 Date class shows Inf as NA; this confuses the use of is.na()
In-Reply-To: <CAO1zAVbD-aB-ou2Tef5C9bMnvCW8mi-4igmnera7T=AUj74-YA@mail.gmail.com>
References: <CAGg4omXVJj3vnK1+Z4zaHeuQ5Q+GjsOcvY22D13-okpjzWCsuA@mail.gmail.com>
 <710BDF90-B13A-47CE-980B-9276293C7E45@llnl.gov>
 <CAGg4omUa-ZU5hrKzj1a6e154bTOCge_T8kahcwEzFSpPxXG3tg@mail.gmail.com>
 <CAO1zAVZ0Wwpqm75JGCNz1YVvBC2FSLL8byBEPLa1-7EQjP09UQ@mail.gmail.com>
 <CAO1zAVbD-aB-ou2Tef5C9bMnvCW8mi-4igmnera7T=AUj74-YA@mail.gmail.com>
Message-ID: <5E75C482-6E29-4F57-A65A-424F9669CAC9@dans.knaw.nl>

I don't think there's much wrong with is.na(as_date(Inf, origin='1970-01-01'))==FALSE, as there still is some "non-NA-ness" about the value (as difftime shows), but that the output when printing is confusing. The way cat is treating it is clearer: it does print Inf.

So would this be a solution?

format.Date <- function (x, ...) 
{
  xx <- format(as.POSIXlt(x), ...)
  names(xx) <- names(x)
  xx[is.na(xx) & !is.na(x)] <- paste('Invalid date:',as.numeric(x[is.na(xx) & !is.na(x)]))
  xx
}

Which causes this behaviour, which I think is clearer:

environment(print.Date) <- .GlobalEnv
x <- as_date(Inf, origin='1970-01-01')
print(x)
# [1] "Invalid date: Inf"

Best regards, 
Emil Bode
 
Data-analyst
 
+31 6 43 83 89 33
emil.bode at dans.knaw.nl
 
DANS: Netherlands Institute for Permanent Access to Digital Research Resources
Anna van Saksenlaan 51 | 2593 HW Den Haag | +31 70 349 44 50 | info at dans.knaw.nl <mailto:info at dans.kn> | dans.knaw.nl <applewebdata://71F677F0-6872-45F3-A6C4-4972BF87185B/www.dans.knaw.nl>
DANS is an institute of the Dutch Academy KNAW <http://knaw.nl/nl> and funding organisation NWO <http://www.nwo.nl/>.
 
Who will be the winner of the Dutch Data Prize 2018? Go to researchdata.nl to nominate. 

?On 09/06/2018, 13:52, "R-devel on behalf of Joris Meys" <r-devel-bounces at r-project.org on behalf of jorismeys at gmail.com> wrote:

    And now I've seen I copied the wrong part of ?is.na
    
    > The default method for is.na applied to an atomic vector returns a
    logical vector of the same length as its argument x, containing TRUE for
    those elements marked NA or, for numeric or complex vectors, NaN, and FALSE
    otherwise.
    
    Key point being "atomic vector" here.
    
    
    On Sat, Jun 9, 2018 at 1:41 PM, Joris Meys <jorismeys at gmail.com> wrote:
    
    > Hi Werner,
    >
    > on ?is.na it says:
    >
    > > The default method for anyNA handles atomic vectors without a class and
    > NULL.
    >
    > I hear you, and it is confusing to say the least. Looking deeper, the
    > culprit seems to be in the conversion of a Date to POSIXlt prior to the
    > formatting:
    >
    > > x <- as.Date(Inf,origin = '1970-01-01')
    > > is.na(as.POSIXlt(x))
    > [1] TRUE
    >
    > Given this implicit conversion, I'd argue that as.Date should really
    > return NA as well when passed an infinite value. The other option is to
    > provide an is.na method for the Date class, which is -given is.na is an
    > internal generic- rather trivial:
    >
    > > is.na.Date <- function(x) is.na(as.POSIXlt(x))
    > > is.na(x)
    > [1] TRUE
    >
    > This might be a workaround for your current problem without needing
    > changes to R itself. But this will give a "wrong" answer in the sense that
    > this still works:
    >
    > > Sys.Date() - x
    > Time difference of -Inf days
    >
    > I personally would go for NA as the "correct" date for an infinite value,
    > but given that this will have implications in other areas, there is a
    > possibility of breaking code and it should be investigated a bit further
    > imho.
    > Cheers
    > Joris
    >
    >
    >
    >
    > On Fri, Jun 8, 2018 at 11:21 PM, Werner Grundlingh <wgrundlingh at gmail.com>
    > wrote:
    >
    >> Indeed. as_date is from lubridate, but the same holds for as.Date.
    >>
    >> The output and it's interpretation should be consistent, otherwise it
    >> leads
    >> to confusion when programming. I understand that the difference exists
    >> after asking a question on Stack Overflow:
    >>   https://stackoverflow.com/q/50766089/914686
    >> This understanding is never mentioned in the documentation - that an Inf
    >> date is actually represented as NA:
    >>   https://www.rdocumentation.org/packages/base/versions/3.5.0/
    >> topics/as.Date
    >> So I'm of the impression that the display should be fixed as a first
    >> option
    >> (thereby providing clarity/transparency in terms of back-end and output),
    >> or the documentation amended (to highlight this) as a second option.
    >>
    >>         [[alternative HTML version deleted]]
    >>
    >> ______________________________________________
    >> R-devel at r-project.org mailing list
    >> https://stat.ethz.ch/mailman/listinfo/r-devel
    >>
    >
    >
    >
    > --
    > Joris Meys
    > Statistical consultant
    >
    > Department of Data Analysis and Mathematical Modelling
    > Ghent University
    > Coupure Links 653, B-9000 Gent (Belgium)
    >
    > <https://maps.google.com/?q=Coupure+links+653,%C2%A0B-9000+Gent,%C2%A0Belgium&entry=gmail&source=g>
    >
    > -----------
    > Biowiskundedagen 2017-2018
    > http://www.biowiskundedagen.ugent.be/
    >
    > -------------------------------
    > Disclaimer : http://helpdesk.ugent.be/e-maildisclaimer.php
    >
    
    
    
    -- 
    Joris Meys
    Statistical consultant
    
    Department of Data Analysis and Mathematical Modelling
    Ghent University
    Coupure Links 653, B-9000 Gent (Belgium)
    <https://maps.google.com/?q=Coupure+links+653,%C2%A0B-9000+Gent,%C2%A0Belgium&entry=gmail&source=g>
    
    -----------
    Biowiskundedagen 2017-2018
    http://www.biowiskundedagen.ugent.be/
    
    -------------------------------
    Disclaimer : http://helpdesk.ugent.be/e-maildisclaimer.php
    
    	[[alternative HTML version deleted]]
    
    ______________________________________________
    R-devel at r-project.org mailing list
    https://stat.ethz.ch/mailman/listinfo/r-devel
    



[Rd] Date class shows Inf as NA; this confuses the use of is.na()
Emil Bode