Dirk Eddelbuettel
2012-Sep-15 18:37 UTC
[Rd] [Repost 2/3] Why fix all.equal for POSIXct at 1 msec?
[ Email repost 2 of 3 ] From: Dirk Eddelbuettel <edd at debian.org> To: R-core <R-core at r-project.org>, Prof Brian D Ripley <ripley at stats.ox.ac.uk> Subject: Why fix all.equal for POSIXct at 1 msec? Date: Sat, 28 Jul 2012 10:29:52 -0500 In R-devel as of today, the following simple loop edd at max:~/svn/r-devel$ ~/bin/R-devel.sh R Under development (unstable) (2012-07-28 r60021) -- "Unsuffered Consequenc es" [...] R> now <- Sys.time(); for (d in seq(-1,-9,by=-1)) { then <- now + 10^d; cat ("10^", d, " identical(): ", identical(now, then), " and all.equal(): " , all.equal(now, then), " diff of ", difftime(then, now), "\n", sep="") } 10^-1 identical(): FALSE and all.equal(): Mean scaled difference: 0.0999999 diff of 0.0999999 10^-2 identical(): FALSE and all.equal(): Mean scaled difference: 0.00999999 diff of 0.00999999 10^-3 identical(): FALSE and all.equal(): TRUE diff of 0.000999928 10^-4 identical(): FALSE and all.equal(): TRUE diff of 9.98974e-05 10^-5 identical(): FALSE and all.equal(): TRUE diff of 1.00136e-05 10^-6 identical(): FALSE and all.equal(): TRUE diff of 9.53674e-07 10^-7 identical(): TRUE and all.equal(): TRUE diff of 0 10^-8 identical(): TRUE and all.equal(): TRUE diff of 0 10^-9 identical(): TRUE and all.equal(): TRUE diff of 0 R> starts reporting all.equal results up to a millisec when identical() clearly shows that a measurable difference is detectable much further. Why stop at a msec? I have using POSIXct to store microsecond data for half a decade, and have been very grateful for how well R supports this. I fear that having all.equal define such an arbitrary bound will lead people to infer that R cannot go further than 10^-2 which is clearly wrong. For completeness, on r-release I get R> now <- Sys.time(); for (d in seq(-1,-9,by=-1)) { then <- now + 10^d; cat ("10^", d, " identical(): ", identical(now, then), " and all.equal(): " , all.equal(now, then), " diff of ", difftime(then, now), "\n", sep="") } 10^-1 identical(): FALSE and all.equal(): TRUE diff of 0.0999999 10^-2 identical(): FALSE and all.equal(): TRUE diff of 0.00999999 10^-3 identical(): FALSE and all.equal(): TRUE diff of 0.000999928 10^-4 identical(): FALSE and all.equal(): TRUE diff of 9.98974e-05 10^-5 identical(): FALSE and all.equal(): TRUE diff of 1.00136e-05 10^-6 identical(): FALSE and all.equal(): TRUE diff of 9.53674e-07 10^-7 identical(): TRUE and all.equal(): TRUE diff of 0 10^-8 identical(): TRUE and all.equal(): TRUE diff of 0 10^-9 identical(): TRUE and all.equal(): TRUE diff of 0 R> R.Version()["version.string"] $version.string [1] "R version 2.15.1 (2012-06-22)" R> Thanks, Dirk -- Dirk Eddelbuettel | edd at debian.org | http://dirk.eddelbuettel.com -- Dirk Eddelbuettel | edd at debian.org | http://dirk.eddelbuettel.com