>>>>> 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. Martin Maechler ETH Zurich and R Core Team ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel