Re: [Rd] reorder [stats] and reorder.factor [lattice]

From: Deepayan Sarkar <deepayan_at_stat.wisc.edu>
Date: Tue 14 Sep 2004 - 05:54:52 EST

Before it's too late for R 2.0.0, do we have a final decision yet on having a reorder method for "factor" in stats?

Deepayan

On Friday 03 September 2004 11:36, Warnes, Gregory R wrote:
> I also have a reorder.factor defined in the gregmisc package. It has
> a slighly different behavior.
> It allows
> - sorting the factor level names via 'mixedsort', which sorts mixed
> numeric/character intelligently so that 'Cis 10mg' comes
> after 'Cis 5mg' and before 'Taxol 10mg'
> - reordering by a numeric order
> - reordering by named factor labels.
>
> Combining it with the version provided by Deepayan we get:
>
> reorder.factor <- function(x,
> order,
> X,
> FUN,
> sort=mixedsort,
> make.ordered = is.ordered(x),
> ... )
> {
> constructor <- if (make.ordered) ordered else factor
>
> if (!missing(order))
> {
> if (is.numeric(order))
> order = levels(x)[order]
> else
> order = order
> }
> else if (!missing(FUN))
> order = names(sort(tapply(X, x, FUN, ...)))
> else
> order = sort(levels(x))
>
> constructor( x, levels=order)
>
> }
>
> Yielding:
> > # Create a 4 level example factor
> > trt <- factor( sample( c("PLACEBO","300 MG", "600 MG", "1200
> > MG"),
>
> + 100, replace=TRUE ) )
>
> > summary(trt)
>
> 1200 MG 300 MG 600 MG PLACEBO
> 18 24 30 28
>
> > # Note that the levels are not in a meaningful order.
> >
> >
> > # Change the order to something useful
> > # default "mixedsort" ordering
> > trt2 <- reorder(trt)
> > summary(trt2)
>
> 300 MG 600 MG 1200 MG PLACEBO
> 24 30 18 28
>
> > # using indexes:
> > trt3 <- reorder(trt, c(4,2,3,1))
> > summary(trt3)
>
> PLACEBO 300 MG 600 MG 1200 MG
> 28 24 30 18
>
> > # using label names:
> > trt4 <- reorder(trt, c("PLACEBO","300 MG", "600 MG", "1200 MG")
> > ) summary(trt4)
>
> PLACEBO 300 MG 600 MG 1200 MG
> 28 24 30 18
>
> > # using frequency
> > trt5 <- reorder(trt, X=as.numeric(trt), FUN=length)
> > summary(trt5)
>
> 1200 MG 300 MG PLACEBO 600 MG
> 18 24 28 30
>
> > # drop out the '300 MG' level
> > trt6 <- reorder(trt, c("PLACEBO", "600 MG", "1200 MG") )
> > summary(trt6)
>
> PLACEBO 600 MG 1200 MG NA's
> 28 30 18 24
>
>
>
> -Greg
>
> (the 'mixedsort' function is available in the gregmisc package, or on
> request)
>
> > -----Original Message-----
> > From: r-devel-bounces@stat.math.ethz.ch
> > [mailto:r-devel-bounces@stat.math.ethz.ch]On Behalf Of Deepayan
> > Sarkar Sent: Friday, August 27, 2004 3:32 PM
> > To: Prof Brian Ripley
> > Cc: r-devel@stat.math.ethz.ch
> > Subject: Re: [Rd] reorder [stats] and reorder.factor [lattice]
> >
> > On Friday 27 August 2004 11:17, Prof Brian Ripley wrote:
> > > On Fri, 27 Aug 2004, Deepayan Sarkar wrote:
> > > > It was recently pointed out on the lists that the S-PLUS
> >
> > Trellis suite
> >
> > > > has a function called reorder.factor that's useful in
> >
> > getting useful
> >
> > > > ordering of factors for graphs. I happily went ahead and
> >
> > implemented it,
> >
> > > > but it turns out that R (not S-PLUS) has a generic called
> >
> > reorder (with a
> >
> > > > method for "dendrogram"). Naturally, this causes R to
> >
> > think I'm defining
> >
> > > > a method for "factor", and gives a warning during check because
> > > > of mismatching argument names.
> > > >
> > > > Any suggestions as to what I should do? Retaining S
> >
> > compatibility doesn't
> >
> > > > seem to be an option. I could make a reorder method for
> >
> > "factor" (which
> >
> > > > sounds like a good option to me), or rename it to something
> > > > like reorderFactor.
> > >
> > > I am pretty sure you don't want to copy the Trellis call, which
> > > is
> > >
> > > function(Factor, X, Function = mean, ...)
> > >
> > > and suggests it dates from the days when S3 lookup could
> >
> > not distingush
> >
> > > functions from other objects by context, hence the
> >
> > capitalization. Even
> >
> > > then, it is inconsistent with tapply etc which use FUN.
> > >
> > > reorder.factor <- function(x, X, FUN=mean)
> > >
> > > looks about right. Another problem though: in Trellis
> >
> > reorder.factor
> >
> > > doesn't just reorder the factor, it makes it an ordered
> >
> > factor. I don't
> >
> > > really see why, especially as the modelling functions
> >
> > assume that ordered
> >
> > > means equally spaced. If this is to be used more generally
> >
> > (as Kjetil
> >
> > > Halvorsen suggests) then it should record the scores used to do
> > > the ordering in an attribute.
> >
> > Well, the ordered factor issue had come up before, and I
> > currently define this
> > as
> >
> >
> > which is different from the S-PLUS version in 2 ways:
> >
> > 1. for (unordered) factors, it changes the levels, but keeps
> > it a factor
> >
> > 2. it works for non-factors as well (which is moot if it's
> > going to be
> > a factor method)
> >
> >
> > Implementation details aside, this seems to me like a good
> > candidate for stats
> > (although it'll probably be used very little). lattice
> > functions (will) have
> > an alternative way of determining panel order based on panel
> > contents, which
> > makes more sense to me in the plotting context.
> >
> > Deepayan
> >
> > ______________________________________________
> > R-devel@stat.math.ethz.ch mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-devel
>
> LEGAL NOTICE
> Unless expressly stated otherwise, this message is confidential and
> may be privileged. It is intended for the addressee(s) only. Access
> to this E-mail by anyone else is unauthorized. If you are not an
> addressee, any disclosure or copying of the contents of this E-mail
> or any action taken (or not taken) in reliance on it is unauthorized
> and may be unlawful. If you are not an addressee, please inform the
> sender immediately.



R-devel@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel Received on Tue Sep 14 05:58:52 2004

This archive was generated by hypermail 2.1.8 : Fri 18 Mar 2005 - 09:00:16 EST