From gregory_r_warnes@groton.pfizer.com  Tue May 29 20:58:30 2001
From: gregory_r_warnes@groton.pfizer.com (Warnes, Gregory R)
Date: Tue, 29 May 2001 15:58:30 -0400
Subject: [Rd] New Package: gregmisc
Message-ID: <5429125E11E4D411AF7300805FE603A8014CEB0B@groexmbcr02.pfizer.com>



  > From: ben@zoo.ufl.edu [mailto:ben@zoo.ufl.edu]
  > 
  > 
  >    Do you have the latest version of plotCI?  (attached 
  > below, I didn't
  > send it as an attachment for the sake of R-devel)  It uses arrows()
  > instead of segments(), which simplifies the code a bit and 
  > incidentally
  > makes it work with logarithmic axes as well (since the 
  > sizes of the bar
  > ends are specified in absolute rather than user units).

Hmmm.  I merged our two versions together.  The revised version is pasted in
below and is included in revisions 0.1.3 of gregmisc, as is an updated .Rd
file.

  > 
  >   Should this code be the first entry in the "miscellaneous code"
  > repository at CRAN that was discussed a while back?
  >
  >   By the way, something occurred to me ... my 
  > "miscellaneous packages"
  > function (which I haven't made available to CRAN yet, 
  > although I probably
  > will eventually) is called "bbmisc".  Yours is called 
  > "gregmisc".  Would
  > it make any sense to standardize these on "<lastname>misc" or
  > "<first_initial><lastname>misc" (bolkermisc, bbolkermisc) to avoid
  > confusion once we have a whole bunch of these packages?

I think that it is a better idea to create packages with coherent themes and
make it easy for people to submit single functions to them.  Perhaps we
should create:

	plotmisc    to hold things like boxplot.n(), plotCI(), plotmeans(),
...	
	modelmisc	to hold things like CI(),...
	datamisc	to hold example data sets
	...
	
and encourage contributions.
	
	
  > 
  >   Also by the way, congratulations for actually getting 
  > around to posting
  > your miscellaneous functions to CRAN!  I hope to do as well.

YES, the jump from "I wrote this useful function" to "posting to CRAN" is
too big.     Hence the idea of the "*misc" packages...

So, if you have some functions, just send along a function and a .Rd file
and I'll create the packages...

  > 
  >   Ben Bolker
  > 

=============== revised plotCI code ====================
plotCI <- function (x, y = NULL,
                    uiw, liw = uiw,   # bar widths  -OR-
                    ui, li, # bar ends
                    err='y', # bar direction, 'y' or 'x'
                    col=par("col"),
                    ylim=NULL,
                    xlim=NULL,
                    barcol=col,
                    sfrac = 0.01,
                    gap=1,
                    lwd=par("lwd"),
                    lty=par("lty"),
                    labels=FALSE,
                    add=FALSE,
                    xlab,
                    ylab,
                    ...
                    )
{
  if (is.list(x)) { 
    y <- x$y 
    x <- x$x 
  }

  if(missing(xlab))
    xlab <- deparse(substitute(x))
  
  if(missing(ylab))
    {
      if(is.null(y))
        {
          xlab  <- ""
          ylab <- deparse(substitute(x))
        }
      else
        ylab <- deparse(substitute(y))
    }

  if (is.null(y)) { 
    if (is.null(x)) 
      stop("both x and y NULL") 
    y <- as.numeric(x) 
    x <- seq(along = x) 
  }

  
  if(err=="y")
    z  <- y
  else
    z  <- x
  
  if(missing(ui))
    ui <- z + uiw
  if(missing(li)) 
    li <- z - liw
   
  if(err=="y" & is.null(ylim))
    {
      ylim <- range(c(y, ui, li), na.rm=TRUE)
    }
  else if(err=="x" & is.null(xlim))
    {
      xlim <- range(c(x, ui, li), na.rm=TRUE)
    }

    
  if(!add)
    {
      if(missing(labels) || labels==F )
        plot(x, y, ylim = ylim, xlim=xlim, col=col,
             xlab=xlab, ylab=ylab, ...)
      else
        {
          plot(x, y, ylim = ylim, xlim=xlim, col=col, type="n",
               xlab=xlab, ylab=ylab,  ...)
          text(x, y, label=labels, col=col )
        }
    }

 
  if(err=="y")
    {
      if(gap!=FALSE)
        gap <- strheight("O") * gap
      smidge <- par("fin")[1] * sfrac

      # draw upper bar
      if(!is.null(li))
          arrows(x , li, x, pmax(y-gap,li), col=barcol, lwd=lwd,
                 lty=lty, angle=90, length=smidge, code=1)
      # draw lower bar
      if(!is.null(ui))
          arrows(x , ui, x, pmin(y+gap,ui), col=barcol,
                 lwd=lwd, lty=lty, angle=90, length=smidge, code=1)
    }
  else
    {
      if(gap!=FALSE)
        gap <- strwidth("O") * gap
      smidge <- par("fin")[2] * sfrac

      # draw left bar
      if(li!=NULL)
        arrows(li, y, pmax(x-gap,li), y, col=col, lwd=lwd, lty=slty,
               angle=90, length=smidge, code=1)
      if(ui!=NULL)
        arrows(ui, y, pmin(x+gap,ui), y, col=col, lwd=lwd, lty=slty,
               angle=90, length=smidge, code=1)
      
    }
      
    

invisible(list(x = x, y = y)) 
} 


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 mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-devel-request@stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._


[Rd] New Package: gregmisc
Warnes, Gregory R