From p.dalgaard@biostat.ku.dk  Mon Aug 27 14:35:17 2001
From: p.dalgaard@biostat.ku.dk (Peter Dalgaard BSA)
Date: 27 Aug 2001 15:35:17 +0200
Subject: [Rd] Wierd problem comparing numeric values and list using == (PR#1076)
In-Reply-To: <200108271245.OAA16874@pubhealth.ku.dk>
References: <200108271245.OAA16874@pubhealth.ku.dk>
Message-ID: <x27kvpwrqi.fsf@blueberry.kubism.ku.dk>

jmc@research.bell-labs.com writes:

> > >       > list(1) == list(1)
> > >       [1] FALSE
> > >       > 1 == list(1)
> > >       [1] TRUE
> > >       > as.integer(1)==list(as.integer(1))
> > >       [1] FALSE
> > >       > as.integer(1)==list(as.double(1))
> > >       [1] FALSE
> > >       > list(as.integer(1))==list(as.integer(1))
> > >       [1] FALSE
> > >       > list(as.integer(1))==as.integer(1)
> > >       [1] FALSE
> > >       > list(as.double(1))==list(as.double(1))
> > >       [1] FALSE
> > >
> > > However, these cases work:
> > >
> > >       > as.double(1)==list(as.integer(1))
> > >       [1] TRUE
> > >       > list(as.integer(1))==as.double(1)
> > >       [1] TRUE
....
> As of 1.4, we will have the `identical' function, which is the right way
> to do such comparisons in any case.
> 
> So I'd vote for making a use of the comparison operators an error unless
> the type is correct (or there is a method defined).  There is even code
> in relop.c (commented out) that looks like the right test.  Any
> objections?

Not really, except that I get the usual nagging suspicion that someone
(who?) meant something by doing it this way...

The current logic seems to be that if either side of the == is a
vector of atomic type, try to coerce the list on the other side to a
similar object and then test. However this has a clear bug in that the
coercion is to double even when the atomic vector is integer. If there
are lists on both sides, a pointer comparison is done:

> x<-2
> list(x)==list(x)
[1] FALSE
> list(.Alias(x))==list(.Alias(x))
[1] TRUE

The latter seems highly dubious to me. I'd rather have a recursive
pairwise application of "==" there. However, none of this is what
identical does, is it?

-- 
   O__  ---- Peter Dalgaard             Blegdamsvej 3  
  c/ /'_ --- Dept. of Biostatistics     2200 Cph. N   
 (*) \(*) -- University of Copenhagen   Denmark      Ph: (+45) 35327918
~~~~~~~~~~ - (p.dalgaard@biostat.ku.dk)             FAX: (+45) 35327907
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-devel-request@stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._


[Rd] Wierd problem comparing numeric values and list using == (PR#1076)
Peter Dalgaard BSA