Skip to content

how to manipulate ... in the argument list

5 messages · Witold E Wolski, Jim Lemon, Duncan Murdoch +1 more

#
Hi,

I am looking for a documentation describing how to manipulate the
"..." . Searching R-intro.html gives to many not relevant hits for
"..."

What I want to do is something like this :


image.2 <- function(x, col , ...){
 # function is manipulating colors (adding a few)
 # since it changes colors it needs to update breaks if defined.

  breaks <- list(...)$breaks

 if( !is.null( list(...)$breaks ) ){
    #manipulate breaks

   image(x, col, breaks = breaks ,...)

  }else{
     image(x,col ,...)
  }
}

but in order to get it working I will need to remove breaks from ...
since otherwise I am getting multiple defined argument for breaks.

So how to manipulate the "..." argument? Or should I use a different pattern

best
#
Hi Witold,
You could try Ben Bolker's "clean.args" function in the plotrix package.

Jim
On Wed, May 11, 2016 at 6:45 PM, Witold E Wolski <wewolski at gmail.com> wrote:
#
On 11/05/2016 4:45 AM, Witold E Wolski wrote:
If breaks is an argument that image.2 uses, you should just list it 
explicitly, and it won't become part of ... .

However, if you really want to do what you describe, you can do it using 
do.call.  Replace

image(x, col, breaks = breaks, ...)

with

dots <- list(...)
dots$breaks <- NULL
do.call(image, c(list(x, col, breaks = breaks), dots))
I'd recommend a different pattern, i.e. include breaks as an argument, 
and possibly use is.missing(breaks) to determine when it has not been used.

Duncan Murdoch
#
Hi Witold,
use do.call()

list.args<-list(...)

#modify 'list.args' (add/delete/modify)

do.call(image, list.args)

best,
vito


Il 11/05/2016 10.45, Witold E Wolski ha scritto:

  
    
#
Duncan suggested to use the argument explicitly and combine it with
the missing function which is for this problem also my preferred
solution:


image.2 <- function(x, col , breaks, ...){
  # function is manipulating colors (adding a few)
  # since it changes colors it needs to update breaks if defined.

  if( !missing(breaks) ){
     #manipulate breaks

    image(x, col, breaks  ,...)

   }else{
      image(x,col ,...)
   }
}

It is good to know that I also could have used do.call.

I also learned yesterday that it is better to search for dot dot dot
argument or for elipsis instead of  ...

best
On 11 May 2016 at 15:45, Vito M. R. Muggeo <vito.muggeo at unipa.it> wrote: