[R] a==0 vs as.integer(a)==0 vs all.equal(a,0)

From: Robin Hankin <r.hankin_at_soc.soton.ac.uk>
Date: Tue 08 Mar 2005 - 20:03:43 EST


?integer says:

      Note that on almost all implementations of R the range of
      representable integers is restricted to about +/-2*10^9: 'double's
      can hold much larger integers exactly.

I am getting very confused as to when to use integers and when not to. In my line
I need exact comparisons of large integer-valued arrays, so I often use as.integer(),
but the above seems to tell me that doubles might be better.

Consider the following R idiom of Euclid's algorithm for the highest common factor
of two positive integers:

   gcd <- function(a, b){

     if (b == 0){ return(a)}
     return(Recall(b, a%%b))


If I call this with gcd(10,12), for example, then a%%b is not an integer, so the first
line of the function, testing b for being zero, isn't legitimate.

OK, so I have some options:

(1) stick in "a <- as.integer(a), b <- as.integer(b)" into the
function: then a%%b *will* be an

                integer and the "==" test is appropriate

(2) use some test like abs(b) < TOL for some suitable TOL (0.5?)
(3) use identical(all.equal(b,0),TRUE) like it says in identical.Rd
(4) use identical(all.equal(b,as.integer(0)),TRUE)

How does the List deal with this kind of problem?

Also, gcd() as written returns a non-integer. Would the List recommend rewriting the last
line as


or not?

Robin Hankin
Uncertainty Analyst
Southampton Oceanography Centre
European Way, Southampton SO14 3ZH, UK
  tel  023-8059-7743

R-help@stat.math.ethz.ch mailing list
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
Received on Tue Mar 08 20:09:28 2005

This archive was generated by hypermail 2.1.8 : Fri 03 Mar 2006 - 03:30:41 EST