Thank you very much for all your responses that help me a lot Pierre.
----- Message d'origine ---- De : Martyn Plummer <[EMAIL PROTECTED]> À : Peter Dalgaard <[EMAIL PROTECTED]> Cc : Gabor Grothendieck <[EMAIL PROTECTED]>; r-devel@r-project.org; pierre clauss <[EMAIL PROTECTED]> Envoyé le : Mercredi, 12 Juillet 2006, 11h10mn 39s Objet : Re: [Rd] [R] Date Format On Tue, 2006-07-11 at 20:05 +0200, Peter Dalgaard wrote: > Martyn Plummer <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> 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