Re: [R] weird to me interaction between time() and %%, %/%

2010-08-31 Thread Steve Taylor
Yes it is a floating point problem.  January 2005 is slightly less than
2005, although the gap is somewhat bigger than .Machine$double.eps
 
time(junk) - 2005  # shows the gap is -2.2737e-13 for my machine
 
Try something this:
floor(time(junk) + 1e-10)

 
 
 
 
— — — — — — — — — — — — — — — — — 
Steve Taylor
Biostatistician
Pacific Islands Families Study
Faculty of Health and Environmental Sciences
Auckland University of Technology
— — — — — — — — — — — — — — — — — 

[[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] weird to me interaction between time() and %%, %/%

2010-08-31 Thread Alistair Gray

Steve,
thanks for the suggestion.
Alistair

On 01/09/10 11:20, Steve Taylor wrote:

Yes it is a floating point problem.  January 2005 is slightly less than 2005,
although the gap is somewhat bigger than .Machine$double.eps
time(junk) - 2005 # shows the gap is -2.2737e-13 for my machine
Try something this:
floor(time(junk) + 1e-10)

— — — — — — — — — — — — — — — — —
*Steve Taylor*
Biostatistician
Pacific Islands Families Study
Faculty of Health and Environmental Sciences
Auckland University of Technology
— — — — — — — — — — — — — — — — —


__
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] weird to me interaction between time() and %%, %/%

2010-08-31 Thread David Scott
Steve is undoubtedly right about this being a floating point problem. 
One comment I would make is that I think floor is a bit nicer for this, 
both conceptually and for readability. Also you don't need a really 
small value to add, half the sampling interval will work:


 junk - ts(1:125, start=c(1999,2), frequency=12)
 floor(time(junk))
  Jan  Feb  Mar  Apr  May  Jun  Jul  Aug  Sep  Oct  Nov  Dec
1999  1999 1999 1999 1999 1999 1999 1999 1999 1999 1999 1999
2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000
2001 2001 2001 2001 2001 2001 2001 2001 2001 2001 2001 2001 2001
2002 2002 2002 2002 2002 2002 2002 2002 2002 2002 2002 2002 2002
2003 2003 2003 2003 2003 2003 2003 2003 2003 2003 2003 2003 2003
2004 2004 2004 2004 2004 2004 2004 2004 2004 2004 2004 2004 2004
2005 2004 2005 2005 2005 2005 2005 2005 2005 2005 2005 2005 2005
2006 2005 2006 2006 2006 2006 2006 2006 2006 2006 2006 2006 2006
2007 2006 2007 2007 2007 2007 2007 2007 2007 2007 2007 2007 2007
2008 2007 2008 2008 2008 2008 2008 2008 2008 2008 2008 2008 2008
2009 2008 2009 2009 2009 2009 2009
 floor(time(junk) + 1/24)
  Jan  Feb  Mar  Apr  May  Jun  Jul  Aug  Sep  Oct  Nov  Dec
1999  1999 1999 1999 1999 1999 1999 1999 1999 1999 1999 1999
2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000
2001 2001 2001 2001 2001 2001 2001 2001 2001 2001 2001 2001 2001
2002 2002 2002 2002 2002 2002 2002 2002 2002 2002 2002 2002 2002
2003 2003 2003 2003 2003 2003 2003 2003 2003 2003 2003 2003 2003
2004 2004 2004 2004 2004 2004 2004 2004 2004 2004 2004 2004 2004
2005 2005 2005 2005 2005 2005 2005 2005 2005 2005 2005 2005 2005
2006 2006 2006 2006 2006 2006 2006 2006 2006 2006 2006 2006 2006
2007 2007 2007 2007 2007 2007 2007 2007 2007 2007 2007 2007 2007
2008 2008 2008 2008 2008 2008 2008 2008 2008 2008 2008 2008 2008
2009 2009 2009 2009 2009 2009 2009

David Scott


On 1/09/2010 11:04 a.m., Alistair Gray wrote:

Dear List,
I'm getting weird and unexpected behaviour using time and %%, or %/%. It's
likely I'm not appreciating the nuances of floating point arithmetic. Or it
could be a bug.

I'm running
R.version
 _
platform   x86_64-redhat-linux-gnu kernel 2.6.33.8-149.fc13.x86_64
arch   x86_64
os linux-gnu
system x86_64, linux-gnu
status
major  2
minor  11.1
year   2010
month  05
day31
svn rev52157
language   R
version.string R version 2.11.1 (2010-05-31)

I was trying to extract the year from a ts object using time and %/%. It has
always seemed to work previously but today I got this peculiar result.

junk- ts(1:125, start=c(1999,2), frequency=12)
time(junk)
Jan  Feb  Mar  Apr  May  Jun  Jul  Aug
1999  1999.083 1999.167 1999.250 1999.333 1999.417 1999.500 1999.583
2000 2000.000 2000.083 2000.167 2000.250 2000.333 2000.417 2000.500 2000.583
2001 2001.000 2001.083 2001.167 2001.250 2001.333 2001.417 2001.500 2001.583
2002 2002.000 2002.083 2002.167 2002.250 2002.333 2002.417 2002.500 2002.583
2003 2003.000 2003.083 2003.167 2003.250 2003.333 2003.417 2003.500 2003.583
2004 2004.000 2004.083 2004.167 2004.250 2004.333 2004.417 2004.500 2004.583
2005 2005.000 2005.083 2005.167 2005.250 2005.333 2005.417 2005.500 2005.583
2006 2006.000 2006.083 2006.167 2006.250 2006.333 2006.417 2006.500 2006.583
2007 2007.000 2007.083 2007.167 2007.250 2007.333 2007.417 2007.500 2007.583
2008 2008.000 2008.083 2008.167 2008.250 2008.333 2008.417 2008.500 2008.583
2009 2009.000 2009.083 2009.167 2009.250 2009.333 2009.417
Sep  Oct  Nov  Dec
1999 1999.667 1999.750 1999.833 1999.917
2000 2000.667 2000.750 2000.833 2000.917
2001 2001.667 2001.750 2001.833 2001.917
2002 2002.667 2002.750 2002.833 2002.917
2003 2003.667 2003.750 2003.833 2003.917
2004 2004.667 2004.750 2004.833 2004.917
2005 2005.667 2005.750 2005.833 2005.917
2006 2006.667 2006.750 2006.833 2006.917
2007 2007.667 2007.750 2007.833 2007.917
2008 2008.667 2008.750 2008.833 2008.917
2009

This looks fine but
time(junk)%/%1L
Jan  Feb  Mar  Apr  May  Jun  Jul  Aug  Sep  Oct  Nov  Dec
1999  1999 1999 1999 1999 1999 1999 1999 1999 1999 1999 1999
2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000
2001 2001 2001 2001 2001 2001 2001 2001 2001 2001 2001 2001 2001
2002 2002 2002 2002 2002 2002 2002 2002 2002 2002 2002 2002 2002
2003 2003 2003 2003 2003 2003 2003 2003 2003 2003 2003 2003 2003
2004 2004 2004 2004 2004 2004 2004 2004 2004 2004 2004 2004 2004
2005 2004 2005 2005 2005 2005 2005 2005 2005 2005 2005 2005 2005
2006 2005 2006 2006 2006 2006 2006 2006 2006 2006 2006 2006 2006
2007 2006 2007 2007 2007 2007 2007 2007 2007 2007 2007 2007 2007
2008 2007 2008 2008 2008 2008 2008 2008 2008 2008 2008 2008 2008
2009 2008 2009 2009 2009 2009 2009

Note the incorrect year for January after 2004.

Also
time(junk)%%1L
  JanFebMarApr

Re: [R] weird to me interaction between time() and %%, %/%

2010-08-31 Thread Gabor Grothendieck
On Tue, Aug 31, 2010 at 7:04 PM, Alistair Gray agg...@paradise.net.nz wrote:
 Dear List,
 I'm getting weird and unexpected behaviour using time and %%, or %/%. It's
 likely I'm not appreciating the nuances of floating point arithmetic. Or it
 could be a bug.


Here are two workarounds to get the year

   time(junk) - (cycle(junk) - 1) / frequency(junk)

   library(chron)
   month.day.year(junk)$year

and this will get the month as a number between 1 and 12:

   cycle(junk)


-- 
Statistics  Software Consulting
GKX Group, GKX Associates Inc.
tel: 1-877-GKX-GROUP
email: ggrothendieck at gmail.com

__
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.