p.dalgaard@biostat.ku.dk
2004-Apr-20 13:42 UTC
[Rd] Re: [R] Unexpected behaviour of identical (PR#6799)
"Swinton, Jonathan" <Jonathan.Swinton@astrazeneca.com> writes:> # works as expected > > ac <- c('A','B'); > > identical(ac,ac[1:2]) > [1] TRUE > > #but > > af <- factor(ac) > > identical(af,af[1:2]) > [1] FALSE > > Any opinions?Did a cross-check with Splus and it doesn't do that , so I think it qualifies as a bug. Shouldn't be too hard to fix (might lose a little efficiencty though). -- O__ ---- Peter Dalgaard Blegdamsvej 3 c/ /'_ --- Dept. of Biostatistics 2200 Cph. N (*) \(*) -- University of Copenhagen Denmark Ph: (+45) 35327918 ~~~~~~~~~~ - (p.dalgaard@biostat.ku.dk) FAX: (+45) 35327907
Prof Brian Ripley
2004-Apr-20 13:51 UTC
[Rd] Re: [R] Unexpected behaviour of identical (PR#6799)
On Tue, 20 Apr 2004 p.dalgaard@biostat.ku.dk wrote:> "Swinton, Jonathan" <Jonathan.Swinton@astrazeneca.com> writes: > > > # works as expected > > > ac <- c('A','B'); > > > identical(ac,ac[1:2]) > > [1] TRUE > > > > #but > > > af <- factor(ac) > > > identical(af,af[1:2]) > > [1] FALSE > > > > Any opinions? > > Did a cross-check with Splus and it doesn't do that , so I think it > qualifies as a bug. Shouldn't be too hard to fix (might lose a little > efficiencty though).No, it comes from> get("[.factor")function (x, i, drop = FALSE) { y <- NextMethod("[") class(y) <- oldClass(x) attr(y, "contrasts") <- attr(x, "contrasts") attr(y, "levels") <- attr(x, "levels") if (drop) factor(y) else y }> attributes(af[1:2, drop=TRUE])$levels [1] "A" "B" $class [1] "factor"> attributes(af[1:2, drop=FALSE])$class [1] "factor" $levels [1] "A" "B" and one needs to swap the orders. I am about to commit the change. -- Brian D. Ripley, ripley@stats.ox.ac.uk Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, UK Fax: +44 1865 272595
What about changing identical() to ignore the order of attributes? Is there any code anywhere that depends on the order of attributes, other than identical()? I've only seen attributes treated as an unordered set, and never as an ordered list. There are some functions in S-plus that change the order of attributes, and the only thing this affects is identical(). (Which in S-plus also pays attention to the order of attributes.) -- Tony Plate At Tuesday 05:42 AM 4/20/2004, p.dalgaard@biostat.ku.dk wrote:>"Swinton, Jonathan" <Jonathan.Swinton@astrazeneca.com> writes: > > > # works as expected > > > ac <- c('A','B'); > > > identical(ac,ac[1:2]) > > [1] TRUE > > > > #but > > > af <- factor(ac) > > > identical(af,af[1:2]) > > [1] FALSE > > > > Any opinions? > >Did a cross-check with Splus and it doesn't do that , so I think it >qualifies as a bug. Shouldn't be too hard to fix (might lose a little >efficiencty though). > >-- > O__ ---- Peter Dalgaard Blegdamsvej 3 > c/ /'_ --- Dept. of Biostatistics 2200 Cph. N > (*) \(*) -- University of Copenhagen Denmark Ph: (+45) 35327918 >~~~~~~~~~~ - (p.dalgaard@biostat.ku.dk) FAX: (+45) 35327907 > >______________________________________________ >R-devel@stat.math.ethz.ch mailing list >https://www.stat.math.ethz.ch/mailman/listinfo/r-devel