From Prof Brian Ripley <ripley@stats.ox.ac.uk>  Tue Oct  3 17:26:24 2000
From: Prof Brian Ripley <ripley@stats.ox.ac.uk> (Prof Brian Ripley)
Date: Tue, 3 Oct 2000 17:26:24 +0100 (BST)
Subject: [Rd] all.equal.list() sometimes fails with unnamed and named components (PR#674)
Message-ID: <200010031626.RAA00492@toucan.stats.ox.ac.uk>


> To: Kurt.Hornik@ci.tuwien.ac.at
> Cc: cberry@tajo.ucsd.edu, r-devel@stat.math.ethz.ch
> Subject: Re: [Rd] all.equal.list() sometimes fails with unnamed and named 
components (PR#674)
> From: Peter Dalgaard BSA <p.dalgaard@biostat.ku.dk>
> Date: 03 Oct 2000 18:05:50 +0200
> 
> Kurt Hornik <Kurt.Hornik@ci.tuwien.ac.at> writes:
> 
> > Maybe we should change this as follows: if either of the two lists has
> > names, work though the named components.  Warn about the ones not
> > present in both.  Compare the ones present in both.  Then get rid of all
> > named components and compare what is left in positional order.
> > 
> > As I said, I am not sure that this is really what we want.
> > 
> > Comments?
> 
> I think you might be right, and also that this is an easy thing to
> implement. Then we'd have
> 
> all.equal(list(a=1,b=2,3,4),list(3,b=2,4,a=1)) == TRUE
> 
> Right?

Probably not. Lists do have orderings: they are not sets but generic
vectors.

> However, BigBrother has
> 
> > all.equal(list(a=1,b=2,3,4),list(3,b=2,4,a=1)) 
> [1] "Names: 2 string mismatches"
> attr(, "continue"):
> [1] T
> 
> > all.equal(list(a=1,b=2,3,4), list(a=1,b=2,4,3))
> [1] T

That's not what current versions of S-PLUS give, as one might hope.

> ..which does look like a "compatible bug"
> 
> Hmm. Maybe one wants positional matching in any case? But then, what
> is the named-component extraction about??

I think that both the names and components should match exactly (the
components recursively).  Unfortunately the named-component extraction
is partial matching (at least, sometimes) so the ordering of the names
always matters.  (There's an S/R difference here I keep forgetting to 
write down. I think it is 

x <- list(aa=1, bb=2)
x["a"]

which gives in S
$aa:
[1] 1
and in R
$"NA"
NULL
so S always partial matches, but R does not always.)

-- 
Brian D. Ripley,                  ripley@stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272860 (secr)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595

-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
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] all.equal.list() sometimes fails with unnamed and named components (PR#674)
Prof Brian Ripley