[R] all.equal and use.names

Martin Maechler m@ech|er @end|ng |rom @t@t@m@th@ethz@ch
Thu May 28 10:53:58 CEST 2020


Note:  all.equal() with all its S3 methods is implemented entirely in R
       code, so it should not be hard to find out where things happen
       and how.

>>>>> John Harrold 
>>>>>     on Wed, 27 May 2020 21:52:16 -0700 writes:

    > Is there a way to compare t1 and t2 above such that the
    > name is used instead of the index?

I think that may be a reasonable feature request.
If you sit down look at the R codes and muse a bit, you may even get to propose
a new optional argument to the all.equal.list() method.
Note the relevant R code is all in <R>/src/library/base/R/all.equal.R
development version (true source!) at
   https://svn.r-project.org/R/trunk/src/library/base/R/all.equal.R

--> would be a topic for R-devel (rather than R-help) though.

Best,
Martin

    > On Wed, May 27, 2020 at 9:14 PM Bert Gunter
    > <bgunter.4567 using gmail.com> wrote:

    >> Nope. You misread I think. It says that use.names = TRUE
    >> causes mismatches to be **reported** by name rather than
    >> index, not that it is recursing by name. It still
    >> recurses by component indices.
    >> 
    >> However, I still think that is wrong. It is not reporting
    >> mismatches **by** name -- it is reporting mismatches
    >> **in** names as well as in value.
    >> 
    >> 
    >> Bert Gunter
    >> 
    >> "The trouble with having an open mind is that people keep
    >> coming along and sticking things into it."  -- Opus (aka
    >> Berkeley Breathed in his "Bloom County" comic strip )
    >> 
    >> 
    >> On Wed, May 27, 2020 at 8:23 PM John Harrold
    >> <john.m.harrold using gmail.com> wrote:
    >> 
    >>> Howdy Folks,
    >>> 
    >>> I believe I'm having trouble understanding the
    >>> documentation for all.equal.  If I have two lists like
    >>> this:
    >>> 
    >>> t1 = list(a = c(1,2,3), b = c("1", "2", "3")) t2 = list(
    >>> b = c("1", "2", "3"), a = c(1,2,3))
    >>> 
    >>> If I read the documentation correctly, by setting
    >>> use.names equal to TRUE I believe this comparison should
    >>> evaluate as true:
    >>> 
    >>> all.equal(t1,t2, use.names=TRUE)
    >>> 
    >>> However, I get the following output:
    >>> 
    >>> which appears as though it is performing the comparison
    >>> based on walking through indices and comparing that way.
    >>> 
    >>> [1] "Names: 2 string mismatches" [2] "Component 1:
    >>> Modes: numeric, character" [3] "Component 1: target is
    >>> numeric, current is character" [4] "Component 2: Modes:
    >>> character, numeric" [5] "Component 2: target is
    >>> character, current is numeric"
    >>> 
    >>> Can someone tell me what I'm doing wrong here?
    >>> --
    >>> John :wq
    >>> 
    >>> [[alternative HTML version deleted]]
    >>> 
    >>> ______________________________________________
    >>> R-help using r-project.org mailing list -- To UNSUBSCRIBE and
    >>> more, see https://stat.ethz.ch/mailman/listinfo/r-help
    >>> PLEASE do read the posting guide
    >>> http://www.R-project.org/posting-guide.html and provide
    >>> commented, minimal, self-contained, reproducible code.
    >>> 
    >> 

    > -- 
    > John :wq

    > 	[[alternative HTML version deleted]]

    > ______________________________________________
    > R-help using r-project.org mailing list -- To UNSUBSCRIBE and
    > more, see https://stat.ethz.ch/mailman/listinfo/r-help
    > PLEASE do read the posting guide
    > http://www.R-project.org/posting-guide.html and provide
    > commented, minimal, self-contained, reproducible code.



More information about the R-help mailing list