Re: [R] Class for time of day?

2009-05-22 Thread Stavros Macrakis
On Thu, May 21, 2009 at 8:28 PM, Gabor Grothendieck ggrothendi...@gmail.com
 wrote:

 It uses hours/minutes/seconds for values  1 day and uses days and
 fractions
 of a day otherwise.


Yes, my examples were documenting this idiosyncracy.


 For values and operations that it has not considered it falls back to
 the internal representation.


Yes, my examples were documenting this bad behavior.


 Most of your examples start to make sense once you realize this.


Of course I realize this.  That was the point of my examples.  I
understand perfectly well what is *causing* the bad behavior.  That doesn't
make it less bad.

What is the point of a class system if functions ignore the class and
perform meaningless calculations on the internal representation?

-s

[[alternative HTML version deleted]]

__
R-help@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.


Re: [R] Class for time of day?

2009-05-22 Thread Gabor Grothendieck
You could create a subclass of times with its own print and format
methods that printed and formatted hours/minutes/seconds even if
greater than one day if that is the main item you need.

Regarding division you could contribute that to the chron package.
I've contributed a few missing items and they were incorporated.

Giving an error when it does not understand something would be
dangerous as it could break much existing code so that would
probably not be possible at this stage.
The idea of defaulting to internal representations is based on
the idea that you get many features for free since the way the
internal representations work gives the right answer in many
cases.   Its best to stick with the implicit philosophy that
underlies a package.  If you want a different philosophy then
its really tantamount to creating a new package.  I don't
think that one is right and the other wrong but simply
represent different viewpoints.

On Fri, May 22, 2009 at 9:33 AM, Stavros Macrakis macra...@alum.mit.edu wrote:
 On Thu, May 21, 2009 at 8:28 PM, Gabor Grothendieck
 ggrothendi...@gmail.com wrote:

 It uses hours/minutes/seconds for values  1 day and uses days and
 fractions
 of a day otherwise.

 Yes, my examples were documenting this idiosyncracy.


 For values and operations that it has not considered it falls back to
 the internal representation.

 Yes, my examples were documenting this bad behavior.


 Most of your examples start to make sense once you realize this.

 Of course I realize this.  That was the point of my examples.  I
 understand perfectly well what is *causing* the bad behavior.  That doesn't
 make it less bad.

 What is the point of a class system if functions ignore the class and
 perform meaningless calculations on the internal representation?

     -s



__
R-help@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.


Re: [R] Class for time of day?

2009-05-22 Thread Stavros Macrakis
On Fri, May 22, 2009 at 10:03 AM, Gabor Grothendieck 
ggrothendi...@gmail.com wrote:

 Regarding division you could contribute that to the chron package.
 I've contributed a few missing items and they were incorporated.


Good to know.  Maybe I'll do that


 Giving an error when it does not understand something would be
 dangerous as it could break much existing code so that would
 probably not be possible at this stage.


But would it break any existing *correct* code?  I find it hard to imagine
any cases where adding 1 hour of difftime to times(12:00:00) should return
1.5 days rather than 13:00:00.


 The idea of defaulting to internal representations is based on
 the idea that you get many features for free since the way the
 internal representations work gives the right answer in many
 cases.


I must admit I am rather shocked by this approach.  Getting something for
free is a bad bargain if what you get is nonsense.


 Its best to stick with the implicit philosophy that
 underlies a package.  If you want a different philosophy then
 its really tantamount to creating a new package.  I don't
 think that one is right and the other wrong but simply
 represent different viewpoints.


So you would defend the viewpoint that 1 hour is the same thing as 1 day?

 -s

[[alternative HTML version deleted]]

__
R-help@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.


Re: [R] Class for time of day?

2009-05-22 Thread Gabor Grothendieck
On Fri, May 22, 2009 at 11:01 AM, Stavros Macrakis
macra...@alum.mit.edu wrote:
 On Fri, May 22, 2009 at 10:03 AM, Gabor Grothendieck
 ggrothendi...@gmail.com wrote:

 Regarding division you could contribute that to the chron package.
 I've contributed a few missing items and they were incorporated.

 Good to know.  Maybe I'll do that


 Giving an error when it does not understand something would be
 dangerous as it could break much existing code so that would
 probably not be possible at this stage.

 But would it break any existing *correct* code?  I find it hard to imagine
 any cases where adding 1 hour of difftime to times(12:00:00) should return
 1.5 days rather than 13:00:00.


 The idea of defaulting to internal representations is based on
 the idea that you get many features for free since the way the
 internal representations work gives the right answer in many
 cases.

 I must admit I am rather shocked by this approach.  Getting something for
 free is a bad bargain if what you get is nonsense.


 Its best to stick with the implicit philosophy that
 underlies a package.  If you want a different philosophy then
 its really tantamount to creating a new package.  I don't
 think that one is right and the other wrong but simply
 represent different viewpoints.

 So you would defend the viewpoint that 1 hour is the same thing as 1 day?

The way this might appear in code is if someone wanted to calculate the
number of one hour intervals in 18 hours.  One could write:

t18 - times(18:00:00)
t1 - times(1:00:00)
as.numeric(t18) / as.numeric(t1)

but since we all know that it uses internal representations unless it
indicates otherwise a typical code snippet might shorten it to:

as.numeric(t18 / t1)

and all such code would break if one were to cause that to generate an error.
(I think it would be ok if it generated a numeric automatically and that was
the enhancement I had suggested to you.)

You can try to argue that the user should not code that way but a huge
amount of chron code exists by now (note that chron may pre-date R).
If it were a new package one could consider raising new errors but at this
point in time it would be unwise.

__
R-help@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.


Re: [R] Class for time of day?

2009-05-22 Thread Stavros Macrakis
On Fri, May 22, 2009 at 12:28 PM, Gabor Grothendieck 
ggrothendi...@gmail.com wrote:

...The way this might appear in code is if someone wanted to calculate the
 number of one hour intervals in 18 hours.  One could write:

 t18 - times(18:00:00)
 t1 - times(1:00:00)
 as.numeric(t18) / as.numeric(t1)

 but since we all know that it uses internal representations unless it
 indicates otherwise


Um, yes, I suppose that was the attitude in the 60's and 70's, but I think
we have moved on from there.  cf.
http://en.wikipedia.org/wiki/Data_abstraction


 a typical code snippet might shorten it to:

 as.numeric(t18 / t1)

 and all such code would break if one were to cause that to generate an
 error.


(18/24 day)/(1/24 day) is the perfectly meaningful dimensionless number 18,
so this code should not break with a correct implementation of '/'.  (cf.
http://en.wikipedia.org/wiki/Dimensional_analysis).  Alas, chron gives the
nonsense result of 18 days.

-s

[[alternative HTML version deleted]]

__
R-help@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.


Re: [R] Class for time of day?

2009-05-22 Thread Gabor Grothendieck
On Fri, May 22, 2009 at 1:55 PM, Stavros Macrakis macra...@alum.mit.edu wrote:
 On Fri, May 22, 2009 at 12:28 PM, Gabor Grothendieck
 ggrothendi...@gmail.com wrote:

 ...The way this might appear in code is if someone wanted to calculate the
 number of one hour intervals in 18 hours.  One could write:

 t18 - times(18:00:00)
 t1 - times(1:00:00)
 as.numeric(t18) / as.numeric(t1)

 but since we all know that it uses internal representations unless it
 indicates otherwise

 Um, yes, I suppose that was the attitude in the 60's and 70's, but I think
 we have moved on from there.  cf.
 http://en.wikipedia.org/wiki/Data_abstraction


 a typical code snippet might shorten it to:

 as.numeric(t18 / t1)

 and all such code would break if one were to cause that to generate an
 error.

 (18/24 day)/(1/24 day) is the perfectly meaningful dimensionless number 18,
 so this code should not break with a correct implementation of '/'.  (cf.
 http://en.wikipedia.org/wiki/Dimensional_analysis).  Alas, chron gives the
 nonsense result of 18 days.

Your point was that otherwise undefined operations should produce an
error and I was illustrating why that could not be introduced at this stage.
I had already suggested that you implement division if you found it important
and that was not the source of any disagreement.

__
R-help@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.


Re: [R] Class for time of day?

2009-05-21 Thread Stavros Macrakis
On Wed, May 20, 2009 at 12:28 PM, Gabor Grothendieck 
ggrothendi...@gmail.com wrote:

 There is a times class in the chron package.


Perfect!  Just what I was looking for.

On Wed, May 20, 2009 at 12:19 PM, jim holtman jholt...@gmail.com wrote:

 If you want the hours from a POSIXct, here is one way of doing it...

  y - difftime(x, trunc(x, units='days'), units='hours')


Ah, trunc.POSIXt -- I missed that one, thanks.

It depends on what type of computations you want to do with it.  You can
 leave it as POSIXct and carry out a lot of them.  Can you specify what you
 want?


I am comparing irregular time series from different days, looking at the
differences in intraday patterns.  So I want to put them on a common 0-24h
scale and then do various kinds of plots and analyses, keeping the
conventional display form (10:30 etc.) when specific times display or
print.  It looks as though chron:::times combined with trunc.POSIXt pretty
much solves my problem, except that `times` ignores the time units:

 as.POSIXct('2009-3-23 12:23')-trunc(as.POSIXct('2009-3-23 12:23'),day)
Time difference of 12.38333 hours
 times(as.POSIXct('2009-3-23 12:23')-trunc(as.POSIXct('2009-3-23
12:23'),day))
Time in days: seems to treat difftimes as raw numbers!!
[1] 12.38333

Obviously I can work around this, but shouldn't `times` give an error when
it encounters an object of unknown class rather than unsafely using its
internal representation?  Of course, better still if `times` converted
correctly

In general, `times` has other inconsistent and peculiar behavior:

times(2) = Time in days: 2Allows specifying multi-day periods, OK
times(1.5) = Time in days: 1.5   Allows specifying fractional multi-day
periods, OK
times(0.5) = 12:00:00   Inconsistent format compared to times(1.5)
times(18:00:00) + times(18:00:00)  = Time in days: 1.5, OK
times(36:00:00) = error  Why does it allow times(1.5) and
times(18:00:00) + times(18:00:00) to specify 1.5 days, but not 36 hours?
times(-0.5) = -0.5   Why doesn't it print Time in days: -0.5?
times(18:00:00)/times(1:00:00) = Time in days: 18Incorrect
dimensions; meaningless result -- should be dimensionless
times(18:00:00) * times(10:00:00) = 07:30:00 Incorrect dimensions;
meaningless result.
sin(times(18:00:00)) = 16:21:34 Meaningless result -- should be error

It's nice that R has a class system, but if code ignores the class

There is an article on dates and times in R News 4/1.


Thanks for the pointer.

  -s

[[alternative HTML version deleted]]

__
R-help@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.


Re: [R] Class for time of day?

2009-05-21 Thread Gabor Grothendieck
On Thu, May 21, 2009 at 5:04 PM, Stavros Macrakis macra...@alum.mit.edu wrote:
 On Wed, May 20, 2009 at 12:28 PM, Gabor Grothendieck
 ggrothendi...@gmail.com wrote:

 There is a times class in the chron package.

 Perfect!  Just what I was looking for.

 On Wed, May 20, 2009 at 12:19 PM, jim holtman jholt...@gmail.com wrote:

 If you want the hours from a POSIXct, here is one way of doing it...
  y - difftime(x, trunc(x, units='days'), units='hours')

 Ah, trunc.POSIXt -- I missed that one, thanks.

 It depends on what type of computations you want to do with it.  You can
 leave it as POSIXct and carry out a lot of them.  Can you specify what you
 want?

 I am comparing irregular time series from different days, looking at the
 differences in intraday patterns.  So I want to put them on a common 0-24h
 scale and then do various kinds of plots and analyses, keeping the
 conventional display form (10:30 etc.) when specific times display or
 print.  It looks as though chron:::times combined with trunc.POSIXt pretty
 much solves my problem, except that `times` ignores the time units:

It uses hours/minutes/seconds for values  1 day and uses days and fractions
of a day otherwise.

For values and operations that it has not considered it falls back to
the internal
representation.

Most of your examples start to make sense once you realize this.


 as.POSIXct('2009-3-23 12:23')-trunc(as.POSIXct('2009-3-23 12:23'),day)
 Time difference of 12.38333 hours
 times(as.POSIXct('2009-3-23 12:23')-trunc(as.POSIXct('2009-3-23
 12:23'),day))
 Time in days:     seems to treat difftimes as raw numbers!!
 [1] 12.38333

 Obviously I can work around this, but shouldn't `times` give an error when
 it encounters an object of unknown class rather than unsafely using its
 internal representation?  Of course, better still if `times` converted
 correctly

 In general, `times` has other inconsistent and peculiar behavior:

 times(2) = Time in days: 2    Allows specifying multi-day periods, OK
 times(1.5) = Time in days: 1.5   Allows specifying fractional multi-day
 periods, OK
 times(0.5) = 12:00:00   Inconsistent format compared to times(1.5)
 times(18:00:00) + times(18:00:00)  = Time in days: 1.5, OK
 times(36:00:00) = error  Why does it allow times(1.5) and
 times(18:00:00) + times(18:00:00) to specify 1.5 days, but not 36 hours?
 times(-0.5) = -0.5   Why doesn't it print Time in days: -0.5?
 times(18:00:00)/times(1:00:00) = Time in days: 18    Incorrect
 dimensions; meaningless result -- should be dimensionless
 times(18:00:00) * times(10:00:00) = 07:30:00 Incorrect dimensions;
 meaningless result.
 sin(times(18:00:00)) = 16:21:34 Meaningless result -- should be error

 It's nice that R has a class system, but if code ignores the class

 There is an article on dates and times in R News 4/1.

 Thanks for the pointer.

   -s



__
R-help@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] Class for time of day?

2009-05-20 Thread Stavros Macrakis
What is the recommended class for time of day (independent of calendar
date)?

And what is the recommended way to get the time of day from a POSIXct
object? (Not a string representation, but a computable representation.)

I have looked in the man page for DateTimeClasses, in the Time Series
Analysis Task View and in Spector's Data Manipulation book but haven't found
these. Clearly I can create my own Time class and hack around with the
internal representation of POSIXct, e.g.

days - unclass(d)/(24*3600)
days-floor(days)

and write print.Time, `-.Time`, etc. etc. but I expect there is already a
standard class or CRAN package.

   -s

[[alternative HTML version deleted]]

__
R-help@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.


Re: [R] Class for time of day?

2009-05-20 Thread Gabor Grothendieck
There is a times class in the chron package.  Times are measured
in fractions of a day so 1/24 is one hour.

 library(chron)
 dt - Sys.time()
 tt - times(format(dt, %H:%M:%S))
 tt
[1] 12:27:46
 tt + 1/24
[1] 13:27:46

There is an article on dates and times in R News 4/1.

On Wed, May 20, 2009 at 10:57 AM, Stavros Macrakis
macra...@alum.mit.edu wrote:
 What is the recommended class for time of day (independent of calendar
 date)?

 And what is the recommended way to get the time of day from a POSIXct
 object? (Not a string representation, but a computable representation.)

 I have looked in the man page for DateTimeClasses, in the Time Series
 Analysis Task View and in Spector's Data Manipulation book but haven't found
 these. Clearly I can create my own Time class and hack around with the
 internal representation of POSIXct, e.g.

    days - unclass(d)/(24*3600)
    days-floor(days)

 and write print.Time, `-.Time`, etc. etc. but I expect there is already a
 standard class or CRAN package.

           -s

        [[alternative HTML version deleted]]

 __
 R-help@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@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.


Re: [R] Class for time of day?

2009-05-20 Thread jim holtman
If you want the hours from a POSIXct, here is one way of doing it; you can
create a function for doing it:

 x - Sys.time()
 x
[1] 2009-05-20 12:17:13 EDT
 y - difftime(x, trunc(x, units='days'), units='hours')
 y
Time difference of 12.28697 hours
 as.numeric(y)
[1] 12.28697

It depends on what type of computations you want to do with it.  You can
leave it as POSIXct and carry out a lot of them.  Can you specify what you
want?


On Wed, May 20, 2009 at 10:57 AM, Stavros Macrakis macra...@alum.mit.eduwrote:

 What is the recommended class for time of day (independent of calendar
 date)?

 And what is the recommended way to get the time of day from a POSIXct
 object? (Not a string representation, but a computable representation.)

 I have looked in the man page for DateTimeClasses, in the Time Series
 Analysis Task View and in Spector's Data Manipulation book but haven't
 found
 these. Clearly I can create my own Time class and hack around with the
 internal representation of POSIXct, e.g.

days - unclass(d)/(24*3600)
days-floor(days)

 and write print.Time, `-.Time`, etc. etc. but I expect there is already a
 standard class or CRAN package.

   -s

[[alternative HTML version deleted]]

 __
 R-help@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.htmlhttp://www.r-project.org/posting-guide.html
 and provide commented, minimal, self-contained, reproducible code.




-- 
Jim Holtman
Cincinnati, OH
+1 513 646 9390

What is the problem that you are trying to solve?

[[alternative HTML version deleted]]

__
R-help@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.