[Rd] Wierd problem comparing numeric values and list using == (PR#1076)
Peter Dalgaard BSA
p.dalgaard@biostat.ku.dk
27 Aug 2001 15:35:17 +0200
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
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._