Skip to content
Prev 56631 / 63421 Next

[EXTERNAL] Re: Re: all.equal failure


        
>> 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.

and I do agree with Duncan even more now that indeed it's very
unsatisfactory that deparse() {and dput(), dump() ..} of a terms
object would only reproduce the formula and nothing else;
and yes that's all in the C code:
 --> src/main/deparse.c
    --> in function deparse2buff()
       -->  inside the (350 lines large)  'case LANGSXP'.

Martin