From maechler@stat.math.ethz.ch  Mon Sep 27 10:12:21 1999
From: maechler@stat.math.ethz.ch (maechler@stat.math.ethz.ch)
Date: Mon, 27 Sep 1999 11:12:21 +0200 (MET DST)
Subject: text( col=, cex=, font=) : doesn't allow more than length-1 arg (PR#287)
Message-ID: <199909270912.LAA27339@pubhealth.ku.dk>


text(..., col = <..>)   doesn't work if col has length more than one;

and the same for 'cex' and 'font'

A toy example, showing what is desired

plot(1);text(1.2, .8+(0:5)/16, LETTERS[6:1])
## works alright

plot(1);text(1.2, .8+(0:5)/16, LETTERS[6:1],col=1:6)
##>>> Error in par(args) : parameter "col" has the wrong length

---
Explanation:
The source code is in  src/main/plot.c  in do_text(),
and from reading it, "col" (& "cex" & "font") are extracted via GetPar()
(and later would nicely be recycled).
HOWEVER, the ProcessInlinePars() called after the three GetPar() gives the
error message, because "col" (cex, or font) are still part of the `args'
list.

All boils down to the FIXME part of the following description of
GetPar() [around line 120 in plot.c] :

/* GetPar is intended for looking through a list  -- typically that bound
 *	to ... --  for a particular parameter value.  This is easier than
 *	trying to match every graphics parameter in argument lists explicitly.
 * FIXME: This needs to be destructive, so that "ProcessInlinePars"
 *	can be safely called afterwards.
 */

PLEASE, can we fix this!

Idea: don't shorten the `parlist' argument of GetPar(), 
      for efficiency.
Just set the TAG to "", such that it will be disregarded subsequently,
i.e., do something like

SEXP GetPar(char *which, SEXP parlist)
{
    SEXP w, p;
    w = install(which);
    for (p = parlist; p != R_NilValue; p = CDR(p)) {
	if (TAG(p) == w) {
 NEW>>>	    TAG(p) == mkString("");
	    return CAR(p);
	}
    }
    return R_NilValue;
}

	  

-- 
Martin Maechler <maechler@stat.math.ethz.ch>	http://stat.ethz.ch/~maechler/
Seminar fuer Statistik, ETH-Zentrum  LEO D10	Leonhardstr. 27
ETH (Federal Inst. Technology)	8092 Zurich	SWITZERLAND
phone: x-41-1-632-3408		fax: ...-1228			<><

-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
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
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._


text( col=, cex=, font=) : doesn't allow more than length-1 arg (PR#287)
maechler@stat.math.ethz.ch