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

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to