[Rd] Re : [R] Date Format

From: pierre clauss <pierreclauss_at_yahoo.fr>
Date: Mon 17 Jul 2006 - 09:45:43 GMT


Thank you very much for all your responses that help me a lot Pierre.

On Tue, 2006-07-11 at 20:05 +0200, Peter Dalgaard wrote:
> Martyn Plummer <plummer@iarc.fr> writes:
>
> > I moved this to R-devel because I am wondering why the base package does
> > not allow you to convert from numeric to Date. Could we not have
> > something like this?
> >
> > as.Date.numeric <- function(x, epoch="1970-01-01", ...) {
> > if (!is.character(epoch) || length(epoch) != 1)
> > stop("invalid epoch")
> > as.Date(epoch, ...) + x
> > }
>
> We could, but you might as well do it explicitly. There's something to
> be said for not confusing the concept of dates with a particular
> implementation, which is effectively what happens if you can convert
> them to and from numeric too seamlessly.

Currently you can easily convert one way, but not the other. I just find that a bit odd.

Pierre's problem was that his Date objects were converted internally by some function. His first instinct, to use as.Date to convert them back, was, I think, correct. But that doesn't work. So now we say "You have to understand how Date objects are implemented to get your dates back"? I don't know about that.

> I'm more perplexed by the failure of adding difftimes to dates:
>
> > as.Date("2006-1-1") + (as.Date("2006-1-1") - as.Date("2006-1-2"))
> [1] "2005-12-31"
> Warning message:
> Incompatible methods ("+.Date", "Ops.difftime") for "+"
>
> and if you have a difftime in non-days units, you'll actually get a
> wrong result:
>
> > D1 <- as.Date("2006-1-1")
> > D2 <- as.Date("2006-1-2")
> > difftime(D2,D1,units="hours")
> Time difference of 24 hours
> > dd <- difftime(D2,D1,units="hours")
> > D1+dd
> [1] "2006-01-25"
> Warning message:
> Incompatible methods ("+.Date", "Ops.difftime") for "+"

[I raised this problem earlier in private discussions with Peter]

It certainly is perplexing. There is code in "+.Date" that correctly handles the case where the second argument is a difftime. But it will never get called! I wonder if it ever worked.

The warning is coming from DispatchGroup (in eval.c). When it finds different methods for two arguments of a binary group generic, it gives up and the default method is called - in this case R_binary in arithmetic.c - which is why the results depends on the implementation of the difftime object.

I guessed that this was a limitation of S3 generics, and I suppose I was right. To allow mixing arguments of two classes, you would need code in Ops.foo to handle objects of class bar *and* vice versa. It's a bad idea to have two separate bits of code to do the same job, so I can't fault the logic of forbidding this, but it does leave us with some usability problems.

While we are on the topic, is there no function to convert a difftime object from one time scale to another? I found a couple of private functions, but nothing public.

Martyn

> > On Tue, 2006-07-11 at 12:58 -0400, Gabor Grothendieck wrote:
> > > Try this:
> > >
> > > library(zoo)
> > > as.Date(11328)
> > >
> > > See the Help Desk article in R News 4/1 for more on dates.
> > >
> > >
> > > On 7/11/06, pierre clauss <pierreclauss@yahoo.fr> wrote:
> > > > Hi everybody,
> > > > I need your precious help for, I think, a simple request, but I do not manage to solve this.
> > > >
> > > > When I use a "table" function with dates in the rows, the rows are coerced to number after the table function.
> > > >
> > > > So I need to transform the row names into date format. But I do not manage.
> > > >
> > > > Therefore, for an example, I manage to write this :
> > > >
> > > > datetest<-"06/01/2001"
> > > > datetest<-as.Date(datetest,"%d/%m/%Y")
> > > > datetest<-as.numeric(datetest)
> > > >
> > > > to get 11328.
> > > >
> > > > But I do not obtain the inverse tranformation :
> > > >
> > > > datetest<-as.Date(datetest,"%d/%m/%Y")
> > > >
> > > > How do we get this please ?
> > > >
> > > > Thanks a lot for your solution.
> > > > Pierre.
> > > >
> > > >
> >
> > -----------------------------------------------------------------------
> > This message and its attachments are strictly confidential. ...{{dropped}}
> >
> > ______________________________________________
> > R-devel@r-project.org mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-devel
> >
>



This message and its attachments are strictly confidential. ...{{dropped}}



R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel Received on Mon Jul 17 19:48:20 2006

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.1.8, at Mon 17 Jul 2006 - 14:26:56 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.