From buser at stat.math.ethz.ch  Tue Nov 22 08:50:57 2005
From: buser at stat.math.ethz.ch (Christoph Buser)
Date: Tue, 22 Nov 2005 08:50:57 +0100
Subject: [Rd] using a factor as col argument in plot:
In-Reply-To: <Pine.LNX.4.61.0511181703030.7151@gannet.stats>
References: <17278.894.547650.661337@stat.math.ethz.ch>
	<Pine.LNX.4.61.0511181703030.7151@gannet.stats>
Message-ID: <17282.52705.59318.72870@stat.math.ethz.ch>

Dear Prof. Ripley

Thank you for your reply and for changing the function in
R-devel. 
I've intended to ask my question in way 2) but I probably have
chosen a ambiguous formulation. :-)

Regards

Christoph Buser

--------------------------------------------------------------
Christoph Buser <buser at stat.math.ethz.ch>
Seminar fuer Statistik, LEO C13
ETH (Federal Inst. Technology)	8092 Zurich	 SWITZERLAND
phone: x-41-44-632-4673		fax: 632-1228
http://stat.ethz.ch/~buser/
--------------------------------------------------------------



Prof Brian Ripley writes:
 > On Fri, 18 Nov 2005, Christoph Buser wrote:
 > 
 > > Dear R core team
 > 
 > and R-devel-listers.
 > 
 > > Using the following code produces an empty plot (similar
 > > to col = NA):
 > >
 > >> plot(1:9, col = factor(rep(1:3,3), labels = c("red", "blue", "black")))
 > >
 > >
 > > My question: Shouldn't one get at least a warning (or an error)
 > > 	     if one tries to use a factor as col argument?
 > >
 > > Thanks for an answer.
 > 
 > I can read that two ways
 > 
 > 1) No, it should not give a warning, as it is programmed to take all
 > invalid values as 0.
 > 
 > 2) Is the way it is programmed sensible (yes) or desirable (no)?
 > 
 > The actual code is
 > 
 > /* Convert a sexp element to an R  color desc */
 > /* We Assume that Checks Have Been Done */
 > 
 > unsigned int RGBpar(SEXP x, int i)
 > {
 >      int indx;
 >      if(isString(x)) {
 >  	return str2col(CHAR(STRING_ELT(x, i)));
 >      }
 >      else if(isInteger(x) || isLogical(x)) {
 >  	if(INTEGER(x)[i] == NA_INTEGER)
 >  	    /*
 >  	     * Paul 01/07/04
 >  	     * Used to be set to NA_INTEGER (see comment in name2col).
 >  	     */
 >  	    return R_TRANWHITE;
 >  	indx = INTEGER(x)[i] - 1;
 >  	if(indx < 0) return Rf_dpptr(CurrentDevice())->bg;
 >  	else return R_ColorTable[indx % R_ColorTableSize];
 >      }
 >      else if(isReal(x)) {
 >  	if(!R_FINITE(REAL(x)[i]))
 >  	    /*
 >  	     * Paul 01/07/04
 >  	     * Used to be set to NA_INTEGER (see comment in name2col).
 >  	     */
 >  	    return R_TRANWHITE;
 >  	indx = REAL(x)[i] - 1;
 >  	if(indx < 0) return Rf_dpptr(CurrentDevice())->bg;
 >  	else return R_ColorTable[indx % R_ColorTableSize];
 >      }
 >      return 0;		/* should not occur */
 > }
 > 
 > but I could see no checks of type in any of the calling functions. Adding 
 > a warning would be a good idea.
 > 
 > 
 > -- 
 > Brian D. Ripley,                  ripley at stats.ox.ac.uk
 > Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
 > University of Oxford,             Tel:  +44 1865 272861 (self)
 > 1 South Parks Road,                     +44 1865 272866 (PA)
 > Oxford OX1 3TG, UK                Fax:  +44 1865 272595



[Rd] using a factor as col argument in plot:
Christoph Buser