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

Paul Lemmens P.Lemmens at nici.kun.nl
Wed Jun 16 17:27:29 CEST 2004


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...
>
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?


kind regards,
Paul



-- 
Paul Lemmens
NICI, University of Nijmegen              ASCII Ribbon Campaign /"\
Montessorilaan 3 (B.01.05)                    Against HTML Mail \ /
NL-6525 HR Nijmegen                                              X
The Netherlands                                                 / \
Phonenumber    +31-24-3612648
Fax            +31-24-3616066




More information about the R-help mailing list