cm.colors bug (PR#244)

Martin Maechler Martin Maechler <maechler@stat.math.ethz.ch>
Mon, 9 Aug 1999 18:29:55 +0200


    david> Full_Name: David M. Potter Version: 0.64.1 OS: solaris 2.6
    david> Submission from: (NULL) (12.18.36.220)

    david> cm.colors() returns an extra element "1":

Yes, this is a bug
    ....

    david> Why I think it happens

    david> The function has an unnecessary right parentheses immediately
    david> preceding ", v=1" which causes the "v=1" to be added to the
    david> vector rather than being interpreted as an argument to hsv().

   david> > cm.colors
   david> function (n) 
   david> {
   david>     k <- n%/%2
   david>     if (2 * k == n) {
   david>         c(hsv(h = 6/12, s = seq(0.5, 0, length = k + 1)[-k - 
   david>             1], v = 1), hsv(h = 10/12, s = seq(0, 0.5, length = n - 
   david>             k + 1)[-1]), v = 1)
   david>     }
   david>     else {
   david>         c(hsv(h = 6/12, s = seq(0.5, 0, length = k + 1), v = 1), 
   david>             hsv(h = 10/12, s = seq(0, 0.5, length = n - k)[-1]), 
   david>             v = 1)
   david>     }
   david> }


Correct.
There were more problems :
cm.colors(1) {and cm.colors(0)} both failed as well.

The following seems to be correct in all cases

cm.colors <- function (n)
{
    if ((n <- as.integer(n[1])) > 0) {
	even.n <- n %% 2 == 0
	k <- n%/%2
	l1 <- k + 1 - even.n
	l2 <- n - k + even.n
	c(if(l1 > 0)
	  hsv(h =  6/12, s= seq(.5, ifelse(even.n,.5/k,0), length = l1), v = 1),
	  if(l2 > 1)
	  hsv(h = 10/12, s= seq(0, 0.5, length = l2)[-1], v = 1))
    } else character(0)
}

I'll commit it for the R-devel [daily snapshot] and hence 0.65.

Martin Maechler <maechler@stat.math.ethz.ch>	http://stat.ethz.ch/~maechler/
Seminar fuer Statistik, ETH-Zentrum SOL G1	Sonneggstr.33
ETH (Federal Inst. Technology)	8092 Zurich	SWITZERLAND
phone: x-41-1-632-3408		fax: ...-1086			<><
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
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
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._