[Rd] [EXTERNAL] Re: all.equal failure
Duncan Murdoch
murdoch@dunc@n @end|ng |rom gm@||@com
Fri Apr 5 16:39:43 CEST 2019
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.
Duncan Murdoch
>
> I'll change my original original title to "all.equal was not a good tool
> for testing certain code issues".
>
> Thanks for the pointer,
>
> Terry
>
>
>
> On 4/5/19 9:00 AM, Duncan Murdoch wrote:
>> On 05/04/2019 9:03 a.m., Therneau, Terry M., Ph.D. via R-devel wrote:
>>> This arose in testing [.terms and has me confused.
>>>
>>> data(esoph) # use a standard data set
>>>
>>> t0x <- terms(model.frame( ~ tobgp, data=esoph))
>>> t1 <- terms(model.frame(ncases ~ agegp + tobgp, data=esoph))
>>> t1x <- (delete.response(t1))[-1]
>>>
>>> > all.equal(t0x, t1x)
>>> [1] TRUE
>>>
>>> # the above is wrong, because they actually are not the same
>>>
>>> > all.equal(attr(t0x, 'dataClasses'), attr(t1x, 'dataClasses'))
>>> [1] "Names: 1 string mismatch"
>>> [2] "Lengths (1, 2) differ (string compare on first 1)"
>>
>> As documented, all.equal() is generic, with methods for different
>> classes. The classes of both t0x and t1x are
>>
>> c("terms","formula")
>>
>> with no all.equal.terms method, so all.equal.formula is called. That
>> method isn't specifically documented, but you can see its definition as
>>
>> function (target, current, ...)
>> {
>> if (length(target) != length(current))
>> return(paste0("target, current differ in having response: ",
>> length(target) == 3L, ", ", length(current) == 3L))
>> if (!identical(deparse(target), deparse(current)))
>> "formulas differ in contents"
>> else TRUE
>> }
>>
>> So the issue is that deparse(t0x) and deparse(t1x) give the same
>> strings with no attributes shown, even though "showAttributes" is set
>> by default. I haven't traced through the C code to see where things
>> are going wrong.
>>
>> Duncan Murdoch
>>
>>>
>>> > sessionInfo()
>>> R Under development (unstable) (2019-04-05 r76323)
>>> Platform: x86_64-pc-linux-gnu (64-bit)
>>> Running under: Ubuntu 18.04.2 LTS
>>>
>>> Matrix products: default
>>> BLAS: /usr/local/src/R-devel/lib/libRblas.so
>>> LAPACK: /usr/local/src/R-devel/lib/libRlapack.so
>>>
>>> locale:
>>> [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
>>> [3] LC_TIME=en_US.UTF-8 LC_COLLATE=C
>>> [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
>>> [7] LC_PAPER=en_US.UTF-8 LC_NAME=C
>>> [9] LC_ADDRESS=C LC_TELEPHONE=C
>>> [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
>>>
>>> attached base packages:
>>> [1] stats graphics grDevices utils datasets methods base
>>>
>>> loaded via a namespace (and not attached):
>>> [1] compiler_3.7.0 tools_3.7.0
>>>
>>>
>>> [[alternative HTML version deleted]]
>>>
>>> ______________________________________________
>>> R-devel using r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>>
>>
>
More information about the R-devel
mailing list