[Rd] [EXTERNAL] Re: all.equal failure
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:
> 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.
> I'll change my original original title to "all.equal was not a good tool
> for testing certain code issues".
> Thanks for the pointer,
> 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)
>>>  TRUE
>>> # the above is wrong, because they actually are not the same
>>> > all.equal(attr(t0x, 'dataClasses'), attr(t1x, 'dataClasses'))
>>>  "Names: 1 string mismatch"
>>>  "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
>> 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
>>>  LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
>>>  LC_TIME=en_US.UTF-8 LC_COLLATE=C
>>>  LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
>>>  LC_PAPER=en_US.UTF-8 LC_NAME=C
>>>  LC_ADDRESS=C LC_TELEPHONE=C
>>>  LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
>>> attached base packages:
>>>  stats graphics grDevices utils datasets methods base
>>> loaded via a namespace (and not attached):
>>>  compiler_3.7.0 tools_3.7.0
>>> [[alternative HTML version deleted]]
>>> R-devel using r-project.org mailing list
More information about the R-devel