[Rd] all.equal.list() sometimes fails with unnamed and named
components (PR#674)
Kurt Hornik
Kurt.Hornik@ci.tuwien.ac.at
Wed, 4 Oct 2000 08:43:57 +0200 (CEST)
>>>>> Prof Brian D Ripley writes:
> On Wed, 4 Oct 2000, Kurt Hornik wrote:
>> > 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.)
>>
>> More precisely, we have
>>
R> x[["a"]]
>> [1] 1
R> x["a"]
>> $"NA"
>> NULL
>>
>> Does this make sense at all? Comparing it to
>>
R> x <- list(aa=1, bb=2, "NA"=3)
R> x["NA"]
>> $"NA"
>> [1] 3
>>
>> I would think that the x["a"] incorrectly indicates that the list has a
>> named component "NA" with value NULL ...
> Yes, so would I. I think it is a bug in R.
Agreed. Should not be too hard to spot ...
>> What should we do about all.equal.list()? Should we deal with the named
>> components first and strip them off, or always go the positional route?
>> Your comment that lists are generic vectors would indicate that the
>> second approach is more appropriate ...
> See the first two lines I've left here. I think it should be
> positional matching *and* the names should match too. That is,
> all.equal.list would fail if one list had names and other did not.
Well should it really FAIL?
What would be the precendence of the comparisons? E.g.,
* compare the lenghts. If different, only retain the components from 1
to the smaller lenght.
* Go through these. If they have names, compare the names. Then
compare the values.
[If both components have the same name but differ in value, the output
would display the name and not the position, right? I mean something
like
msg <- c(msg, paste("Component ", nc[i], ": ", mi, sep=""))
rather than
msg <- c(msg, paste("Component ", i, ": ", mi, sep=""))
???]
-k
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
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
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._