[Rd] Re: [R] Unexpected behaviour of identical (PR#6799)

Prof Brian Ripley ripley at stats.ox.ac.uk
Tue Apr 20 13:51:46 CEST 2004


On Tue, 20 Apr 2004 p.dalgaard at biostat.ku.dk wrote:

> "Swinton, Jonathan" <Jonathan.Swinton at 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 at 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



More information about the R-devel mailing list