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. 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@r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-devel >> > [[alternative HTML version deleted]] ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel