[Rd] [EXTERNAL] Re: Re: all.equal failure

Duncan Murdoch murdoch@dunc@n @end|ng |rom gm@||@com
Fri Apr 5 18:00:27 CEST 2019


On 05/04/2019 11:33 a.m., Martin Maechler wrote:
>>>>>> Duncan Murdoch
>>>>>>      on Fri, 5 Apr 2019 11:12:48 -0400 writes:
> 
>      > On 05/04/2019 10:46 a.m., Therneau, Terry M., Ph.D. wrote:
>      >>
>      >>
>      >> On 4/5/19 9:39 AM, Duncan Murdoch wrote:
>      >>> On 05/04/2019 10:19 a.m., Therneau, Terry M., Ph.D. wrote:
>      >>>> Duncan,
>      >>>>    I should have included it in my original note, but
>      >>>>
>      >>>>       all.equal(unclass(t0x), unclass(t1x))
>      >>>>
>      >>>> returns TRUE as well.  I had tried that as well.   But a further look at
>      >>>> all.equal.default shows the following line right near the top:
>      >>>>      if (is.language(target) || is.function(target))
>      >>>>          return(all.equal.language(target, current, ...))
>      >>>>
>      >>>> and that path explicitly ignores attributes.
>      >>>
>      >>> Which R version are you using?  I see deparse(target) and deparse(current) in
>      >>> all.equal.language(), and those should not be ignoring attributes according to the
>      >>> documentation.
> 
> But the problem is that indeed  "of course"  all.equal.formula()
> and not all.equal.language() is called for the terms since as
> you yourself remarked, their class is  c("terms", "formula"),
> 
> and so what Terry reported is indeed correct *and* a bug
> and in "all versions" of R (I did not look far back, but these things
> haven't changed much).
> 
> The cleanest would probably be to define an  all.equal.terms()
> method, as I think there may be more code relying on the
> behavior of  all.equal.formula() to only look at the formulas
> themselves and not their attributes...
> but you (Duncan) and others may have a different opinion.

I don't know if that would be easy -- it seems to me there is a bug in 
deparse(), which won't show attributes on language objects even if you 
ask it to:

# This is fine:
deparse(structure(1, attrib=2))
# [1] "structure(1, attrib = 2)"

# This doesn't show the attributes
deparse(structure(quote(f(1)), attrib=2))
# [1] "f(1)"

But as you mention, if this isn't a new bug fixing it will likely cause 
problems for people who assume it is intentional...

Duncan



More information about the R-devel mailing list