From savicky at cs.cas.cz  Thu Jul 12 10:16:17 2007
From: savicky at cs.cas.cz (Petr Savicky)
Date: Thu, 12 Jul 2007 10:16:17 +0200
Subject: [Rd] sweep sanity checking?
In-Reply-To: <469557AC.2010607@acm.org>
References: <468579C0.7090809@zoo.ufl.edu>
	<loom.20070709T175233-590@post.gmane.org>
	<469557AC.2010607@acm.org>
Message-ID: <20070712081616.GA7100@cs.cas.cz>

The suggestion sounds reasonable to me. Let me add that sweep is written
to work even if MARGIN includes more than one dimension. To handle these
cases correctly, the test may be replaced e.g. by
     if (check.margin && prod(dims[MARGIN])!=length(STATS)) {
       warning("length(STATS) != prod(dim(x)[MARGIN])")
     } else if (prod(dims[MARGIN]) %% length(STATS)!=0)
       warning("prod(dim(x)[MARGIN]) is not a multiple of length(STATS)")
or even by
     dimstat <- if (is.null(dim(STATS))) length(STATS) else dim(STATS)
     if (check.margin && any(dims[MARGIN]!=dimstat)) {
       warning("length(STATS) or dim(STAT) do not match dim(x)[MARGIN]")
     } else if (prod(dims[MARGIN]) %% length(STATS)!=0)
       warning("prod(dim(x)[MARGIN]) is not a multiple of length(STATS)")

Petr.

> Just an opinion from an R user: I think it's a sound idea.  I use my own 
> version of sweep with a stricter check: it stops if the vector is not 
> exactly the right length.
> 
> -- Tony Plate
> 
> Ben Bolker wrote:
> > Ben Bolker <bolker <at> zoo.ufl.edu> writes:
> >
> >   
> >>   What would R-core think of the following 'enhanced'
> >> sweep?  
> >>     
> >
> >  (now posted at
> > http://wiki.r-project.org/rwiki/doku.php?id=rdoc:base:sweep
> > )
> >
> > It always warns if dim(x)[MARGIN] is
> >



[Rd] sweep sanity checking?
Petr Savicky