Skip to content
Prev 53611 / 63421 Next

[bug] droplevels() also drop object attributes (comment…)

>> Hi,

    >> Just reporting a small bug? not really a big deal, but I
    >> don?t think that is intended: droplevels()?also drops all
    >> object?s attributes.

    > Yes.  The help page for droplevels (or the simple
    > definition of 'droplevels.factor') clearly indicate that
    > the method for factors is really just a call to factor(x,
    > exclude = *)

    > and that _is_ quite an important base function whose
    > semantic should not be changed lightly. Still, let's
    > continue :

    > Looking a bit, I see that the current behavior of factor()
    > {and hence droplevels} has been unchanged in this respect
    > for the whole history of R, well, at least for more than
    > 17 years (R 1.0.1, April 2000).

    > I'd agree there _is_ a bug, at least in the documentation
    > which does *not* mention that currently, all attributes
    > are dropped but "names", "levels" (and "class").

    > OTOH, factor() would only need a small change to make it
    > preserve all attributes (but "class" and "levels" which
    > are set explicitly).

    > I'm sure this will break some checks in some packages.  Is
    > it worth it?
> because 'drop=TRUE' calls factor(..) and that would also
    > preserve the "dim" attribute.  I would think that the
    > changed behavior _is_ better, and is also according to
    > documentation, because the help page for [.factor explains
    > that 'drop = TRUE' drops levels, but _not_ that it
    > transforms a factor matrix into a factor (vector).

    > Martin

I'm finally coming back to this.
It still seems to make sense to change factor() and hence
droplevels() behavior here, and plan to commit this change
within a day.

Martin Maechler
ETH Zurich