Thanks Boris for the detailed answer. I thought to make it backward
compatible because I did not know if gamma parameter would change the
result if absent. As far as I can see changes in my results are not
relevant, so I think to follow your advice to update the old code.

Thanks

~ Francesco Brundu


On 20 April 2014 02:16, Boris Steipe <boris.ste...@utoronto.ca> wrote:

> If it MUST be parameter-compatible with the old call, you could just add
> "..." to your local version of rainbow. The unused parameter will then be
> dropped.
>
> Here's how:
>
> # The original creates an error ...
> rainbow(100, s = 1.0, v = 0.75, start = 0.0, end = 0.75, gamma = 1.5)
>
> Error in rainbow(100, s = 1, v = 0.75, start = 0, end = 0.75, gamma = 1.5)
> :
>   unused argument (gamma = 1.5)
>
> # The code of the function is here:
> > rainbow
> function (n, s = 1, v = 1, start = 0, end = max(1, n - 1)/n,
>     alpha = 1)
> {
>     if ((n <- as.integer(n[1L])) > 0) {
>         if (start == end || any(c(start, end) < 0) || any(c(start,
>             end) > 1))
>             stop("'start' and 'end' must be distinct and in [0, 1].")
>         hsv(h = seq.int(start, ifelse(start > end, 1, 0) + end,
>             length.out = n)%%1, s, v, alpha)
>     }
>     else character()
> }
> <bytecode: 0x101968950>
> <environment: namespace:grDevices>
>
> # I add ... to the parameters and define a local version of rainbow
>
> rainbow = function (n, s = 1, v = 1, start = 0, end = max(1, n - 1)/n,
>      alpha = 1, ...)
>  {
>      if ((n <- as.integer(n[1L])) > 0) {
>          if (start == end || any(c(start, end) < 0) || any(c(start,
>              end) > 1))
>              stop("'start' and 'end' must be distinct and in [0, 1].")
>          hsv(h = seq.int(start, ifelse(start > end, 1, 0) + end,
>              length.out = n)%%1, s, v, alpha)
>      }
>      else character()
>  }
>
> # same code except for the dots...
> # Now it accepts and discards unused arguments
> > rainbow(100, s = 1.0, v = 0.75, start = 0.0, end = 0.75, gamma = 1.5,
> gefingerpoken = TRUE)
>   [1] "#BF0000FF" "#BF0900FF" "#BF1100FF" "#BF1A00FF" "#BF2300FF"
> "#BF2B00FF" "#BF3400FF"
> [...]
>  [99] "#5700BFFF" "#6000BFFF"
>
> # and if I want the original back, I just delete my local version ...
> > rm(rainbow)
> > rainbow(100, s = 1.0, v = 0.75, start = 0.0, end = 0.75, gamma = 1.5)
> Error in rainbow(100, s = 1, v = 0.75, start = 0, end = 0.75, gamma = 1.5)
> :
>   unused argument (gamma = 1.5)
>
> > rainbow(100, s = 1.0, v = 0.75, start = 0.0, end = 0.75)
>   [1] "#BF0000FF" "#BF0900FF" "#BF1100FF" "#BF1A00FF" "#BF2300FF"
> "#BF2B00FF" "#BF3400FF"
> [...]
>  [99] "#5700BFFF" "#6000BFFF"
>
> You can read about the '...' argument in the Introduction to R. Here we
> use it not to pass variables on, but to have them not cause an error when
> present.
>
> HOWEVER: I personally would consider this poor style. It's probably better
> to review and update your old code. There may be other less obvious
> problems.
>
> YMMV
> B.
>
>
>
>
>
> On 2014-04-19, at 7:19 PM, Francesco Brundu wrote:
>
> > Hi Boris,
> > yes I tried this way and it worked. The fact is that I wanted to be
> compliant with the old code, I did not want to change anything. So I wanted
> to find a new way to rewrite the code.
> > Thanks
> >
> > ~ Francesco Brundu
> >
> >
> > On 19 April 2014 23:18, Boris Steipe <boris.ste...@utoronto.ca> wrote:
> > Have you looked at ?rainbow ?
> > Is there a reason why you don't simply leave the gamma parameter away?
> >
> > Try:
> > pie(rep(1,100), col=rainbow(100, s = 1.0, v = 0.75, start = 0.0, end =
> 0.75))
> >
> > Cheers,
> > B.
> >
> >
> > On 2014-04-19, at 6:05 AM, Francesco Brundu wrote:
> >
> > > Hi all,
> > > I am using an old code (probably written for R 2.5) and it stops when
> > > calling rainbow() with gamma argument. I saw that gamma argument is not
> > > present in newer version of R rainbow function. How can I translate
> this
> > > line of code:
> > >
> > > rainbow(100, s = 1.0, v = 0.75, start = 0.0, end = 0.75, gamma = 1.5)
> > >
> > > ?
> > >
> > > It fails with:
> > >
> > > Error in rainbow(100, s = 1, v = 0.75, start = 0, end = 0.75, gamma =
> 1.5)
> > > :
> > >  unused argument (gamma = 1.5)
> > > Calls: nmfconsensus ... matrix.abs.plot -> image -> image.default ->
> rainbow
> > > Execution halted
> > >
> > > Thanks
> > >
> > > ~ Francesco Brundu
> > >
> > >       [[alternative HTML version deleted]]
> > >
> > > ______________________________________________
> > > R-help@r-project.org mailing list
> > > https://stat.ethz.ch/mailman/listinfo/r-help
> > > PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> > > and provide commented, minimal, self-contained, reproducible code.
> >
> >
>
>

        [[alternative HTML version deleted]]

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to