[R] subset(..., drop=TRUE) doesn't seem to work.

Prof Brian Ripley ripley at stats.ox.ac.uk
Wed Jun 16 18:04:42 CEST 2004


On Wed, 16 Jun 2004, Paul Lemmens wrote:

> Dear Peter,
> 
> --On woensdag 16 juni 2004 17:06 +0200 Peter Dalgaard 
> <p.dalgaard at biostat.ku.dk> wrote:
> 
> > Paul Lemmens <P.Lemmens at nici.kun.nl> writes:
> >
> >> Hello!
> >>
> >> If I read ?subset, the workings of the argument drop (to me) seem to
> >> imply equivalence of A and B (R 1.9.0):
> >>
> >> # A
> >> dd <- data.frame(rt=rnorm(10), c=factor(gl(2,5)))
> >> dd <- subset(dd, c==1)
> >> dd$c <- dd$c[, drop=TRUE]
> >> table(dd$c)
> >>
> >> 1
> >> 5
> >> 	
> >>
> >> # B
> >> dd <- data.frame(rt=rnorm(10), c=factor(gl(2,5)))
> >> dd <- subset(dd, c==1, drop=TRUE)
> >> table(dd$c)
> >>
> >> 1 2
> >> 5 0
> >>
> >> So to lose the second level of dd$c, in method B I still need to 'dd$c
> >> <-
> >> dd$c[, drop=TRUE]', while the manual seems to imply that with the drop
> >> argument to subset() this would not be necessary.
> >>
> >>
> >> Could you comment?
> >
> > Looks like a documentation bug. The actual code ends up  doing
> >
> >     x[r, vars, drop = drop]
> >
> > and "[.data.frame" will not drop factor levels. I wonder if it ever
> > did...

No, AFAIK. It was definitely not documented to last November when that 
comment was added to ?subset.

> Bottomline: unless I find the time to submit a patch for '[.data.frame', 
> I'll need to use the more elaborate way of dropping the unused levels?
> 
> Does "will not drop" imply that it cannot be programmed, should not be 
> programmed, or has not been programmed yet?

It is designed not to.  Look at how ?"[.data.frame" documents it.  We
don't want it altered and it would break a lot of code to do so.  I think
the author of those lines was under a misapprension.

-- 
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-help mailing list