[R] date operations

Gavin Simpson gavin.simpson at ucl.ac.uk
Wed Dec 3 21:12:30 CET 2008


On Wed, 2008-12-03 at 14:13 -0500, Gabor Grothendieck wrote:
<snip />
> >
> > Why it works is not odd if you look at the help for ?`+.Date`, which
> > shows that for this method (correct term?) we need 'date' + 'x', where
> > 'date' is an object of class Date and 'x' is numeric.
> 
> In fact what it says is that x may be numeric OR difftime.

Yes, sorry, got distracted with dinner...

>   Also the
> above does not explain it in any case because:
> 
> > "+.Date"(alpha1, alpha2)
> [1] "2009-02-15"

I guess something like this is happening:

> as.Date(as.numeric(alpha1) + as.numeric(alpha2), origin="1970-01-01")
[1] "2009-02-15"

Although internally, `+.Date` deals with objects of class "difftime" for
either date or x. So technically the help for ?`+.Date` is at odds with
the code; although there is a degree of ambiguity in what a 'date
object' is?

> 
> > alpha1+alpha2
> Time difference of 14290 days
> Warning message:
> Incompatible methods ("Ops.difftime", "+.Date") for "+"

But you are doing method dispatch yourself (by hand) in the first case
and allowing `+` to deal with it in the latter. The warning is not
coming from `+.Date`().

This looks like an infelicity in non-standard method dispatch that takes
place within `+`, a primitive function. It would be nice if `+` didn't
raise warnings about potential incompatible classes, but it can't know
in advance what methods users might write for it.

> 
> >
> > The OP can avoid the warning by:
> >
> >> alpha2 + as.numeric(alpha1)
> > [1] "2009-02-15"
> 
> His question was how to avoid using as.numeric.

Well, I read it as not converting his "Date"s to numerics (I converted a
"difftime"). But that is splitting hairs ;-)

The OP can use `+.Date` directly as you suggest, or ignore the warnings
as they are harmless, or coerce the difftime object to numeric as I
suggested. It makes no odds in these cases.

I guess the main point for the OP is to realise why the warning is there
and determine if it is OK to ignore.

G

> 
> >
> > If you put alpha1 first (class difftime) that method gets used and
> > alpha2 is coerced to numeric to complete the operation:
> >
> >> alpha1+alpha2
> > Time difference of 14290 days
> > Warning message:
> > Incompatible methods ("Ops.difftime", "+.Date") for "+"
> >> as.numeric(alpha2) + 56
> > [1] 14290
> >
> > To answer the OP's question about conversion, no you don't need to
> > convert Date objects to numerics to work with them. You just need to be
> > aware of method dispatch for `+()` and check that adding objects of
> > differing classes makes sense.
> >
> > Of course, this assumes that the OP wanted the answer as an object of
> > class "Date"...?
> >
> > G
> >
> >>
> >> On Tue, Dec 2, 2008 at 4:10 PM, Christophe Dutang <dutangc at gmail.com> wrote:
> >> > Hi all,
> >> >
> >> > I'm dealing with dates in R (2.7.2), but some basic operations raise a
> >> > warning.
> >> >
> >> > Incompatible methods ("+.Date", "Ops.difftime") for "+"
> >> >
> >> > I saw this topic in this mailing list, but I do not understand what to
> >> > do...
> >> >
> >> > cf. https://stat.ethz.ch/pipermail/r-help/2008-June/165842.html
> >> >
> >> > Do I have to convert Dates to numeric?
> >> >
> >> > Thanks in advance
> >> >
> >> > Christophe
> >> >
> >> > PS : R script used
> >> >
> >> > alpha2=as.Date("2008-12-21")
> >> > alpha1=as.Date("2008-12-21")-as.Date("2008-10-26")
> >> > alpha1
> >> > alpha2
> >> > alpha1+alpha2
> >> >
> >> >
> >> >        [[alternative HTML version deleted]]
> >> >
> >> > ______________________________________________
> >> > R-help at r-project.org mailing list
> >> > https://stat.ethz.ch/mailman/listinfo/r-help
> >> > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> >> > and provide commented, minimal, self-contained, reproducible code.
> >> >
> >>
> >> ______________________________________________
> >> R-help at r-project.org mailing list
> >> https://stat.ethz.ch/mailman/listinfo/r-help
> >> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> >> and provide commented, minimal, self-contained, reproducible code.
> > --
> > %~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
> >  Dr. Gavin Simpson             [t] +44 (0)20 7679 0522
> >  ECRC, UCL Geography,          [f] +44 (0)20 7679 0565
> >  Pearson Building,             [e] gavin.simpsonATNOSPAMucl.ac.uk
> >  Gower Street, London          [w] http://www.ucl.ac.uk/~ucfagls/
> >  UK. WC1E 6BT.                 [w] http://www.freshwaters.org.uk
> > %~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
> >
> >
-- 
%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
 Dr. Gavin Simpson             [t] +44 (0)20 7679 0522
 ECRC, UCL Geography,          [f] +44 (0)20 7679 0565
 Pearson Building,             [e] gavin.simpsonATNOSPAMucl.ac.uk
 Gower Street, London          [w] http://www.ucl.ac.uk/~ucfagls/
 UK. WC1E 6BT.                 [w] http://www.freshwaters.org.uk
%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: This is a digitally signed message part
URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20081203/cf26854d/attachment.bin>


More information about the R-help mailing list