[R] maptools, sunriset, POSIX timezones
Roger Bivand
Roger.Bivand at nhh.no
Tue Jan 20 15:36:35 CET 2009
Phil Taylor <tabanid <at> gmail.com> writes:
>
> Hi ...
>
> I wonder if anyone can provide some insight into why the first three
> examples using the sunriset function (appended below, with results) give
> the correct answer, but the fourth generates and error.
>
> The first two use ISOdatetime with and without a time zone attribute,
> and the sunriset function returns the correct sunset time.
>
> The third and fourth adds 10 seconds to the ISOdatetime (with and
> without the time zone attribute) but the function only works when the
> time zone is specified (example 3).
>
> When I look at the objects (print or str) they appear the same, and when
> I check to see if they are equivalent (e.g.)
>
> > time.1 <- ISOdatetime(1970, 1, 1, 10, 0, 0) + 10
> > time.2 <- ISOdatetime(1970, 1, 1, 10, 0, 0, tz="GMT") + 10
> > time.1 == time.2
> [1] TRUE
>
> they appear to be the same.
>
> I wonder if I am either missing something important, doing something
> improperly, or if there is a small bug somewhere.
There may be a misunderstanding, but a small bug is also possible. In an
internal call to as.POSIXct(), a NULL value was being passed to the tz=
argument when 10 seconds had been added and tz= not given in ISOdatetime().
In forthcoming maptools 0.7-18, the value being passed is tested, and the tz=
argument dropped if the value is NULL. With this:
> library(maptools)
Loading required package: foreign
Loading required package: sp
> Sys.setenv(TZ = "GMT")
> location <- matrix(c(-80.1,42.5), nrow=1)
> sunriset(location, ISOdatetime(1970, 1, 1, 10, 0, 0, tz="GMT"),
direction="sunset", POSIXct.out=TRUE)
day_frac time
newlon 0.915226 1970-01-01 21:57:55
> sunriset(location, ISOdatetime(1970, 1, 1, 10, 0, 0), direction="sunset",
POSIXct.out=TRUE)
day_frac time
newlon 0.915226 1970-01-01 21:57:55
> sunriset(location, ISOdatetime(1970, 1, 1, 10, 0, 0, tz="GMT") + 10,
direction="sunset", POSIXct.out=TRUE)
day_frac time
newlon 0.915226 1970-01-01 21:57:55
> sunriset(location, ISOdatetime(1970, 1, 1, 10, 0, 0) + 10,
direction="sunset", POSIXct.out=TRUE)
day_frac time
newlon 0.915226 1970-01-01 21:57:55
Thanks for the report - it could well be that the time classes are not being
used well here - in addition, the sunset etc. functions of course only look
at yearday, so adding 10 seconds isn't very meaningful, but I guess this is
a simple example of a real problem.
Roger Bivand
>
> I'm using windows Vista and R 2.8.1
>
> Thanks,
>
> Phil Taylor
> ptaylor <at> resalliance.org
>
More information about the R-help
mailing list