From: Deepayan Sarkar <deepayan_at_stat.wisc.edu>

Date: Tue 14 Sep 2004 - 05:54:52 EST

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

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
*