[Rd] Changing "..." inside a function: impossible? desirable?
Warnes, Gregory R
gregory_r_warnes@groton.pfizer.com
Tue Dec 17 22:33:02 2002
I agree that it would be useful to be able to manipulate the contents of
<...>.
Perhaps syntax like:
dots <- dotargs() # equivalent to dots <- list(...)
val1 <- dotargs('arg1')
to extract the contents of <...> and
dotargs('arg1') <- val1
to modifiy the argument 'arg1' would do the trick. Then one could do things
like
myplot <- function(x,y, ...) {
plot(0:1, 0:1, type = "n", axes = FALSE)
result <- <<do stuff with x,y>>
points(result, ...)
dotargs('pch') <- NA
axis(1, ...)
axis(2, ...)
dotargs('lwd') <- dotargs('xaxp') <- dotartgs('yaxp') <- NULL
title(...)
}
-Greg
> -----Original Message-----
> From: Martin Maechler [mailto:maechler@stat.math.ethz.ch]
> Sent: Tuesday, December 17, 2002 1:07 PM
> To: R-devel@stat.math.ethz.ch
> Subject: [Rd] Changing "..." inside a function: impossible? desirable?
>
>
> This is was something like a request for your comments, thoughts
> on the topic...
>
> Many of you will know that the "..." (aka \dots) argument is
> very useful for passing ``further graphical parameters'',
> but can be a pain when itself is passed to too many plotting
> functions inside your own function.
> An artificial example being
>
> myplot <- function(x,y, ...) {
>
> plot(0:1, 0:1, type = "n", axes = FALSE)
>
> result <- <<do stuff with x,y>>
>
> points(result, ...)
> axis(1, ...)
> axis(2, ...)
> title(...)
> }
>
> It's clear that some things in "..." can be passed to title() and
> some to axis(), etc.
> Of course the above is really silly, but I have a situation
> where I'd like to see if something, say, `myarg' is part of "..."
> {piece of cake easy, see below} but then I want to *eliminate*
> it from "..." such that I can pass "..." down to other functions
> which would want to see a `myarg' argument.
>
> Something like
>
> if("myarg" %in% (naml <- names(list(...)))) {
> ## ok, it's there, take it out
> marg <- list(...)$ marg
>
> ## what I now would like is
>
> ... <- unlist( list(...)["myarg" != naml] )
> }
>
>
> BTW: one relatively ugly workaround is to use the above *list*
> say nlist <- list(...)["myarg" != naml]
> and do all subsequent call where I'd had "..." as
> do.call( <funname> , c(list( <<other args to funnname>>
> ), nlist))
> but this really obfuscates the code horrendously.
>
> PS:
> I know that using a pars = list(.) argument instead of "..."
> is another alternative (that we have been using) as well,
> but lets assume this can't be done, because of
> compatibility reasons.
>
> Martin Maechler <maechler@stat.math.ethz.ch>
http://stat.ethz.ch/~maechler/
Seminar fuer Statistik, ETH-Zentrum LEO C16 Leonhardstr. 27
ETH (Federal Inst. Technology) 8092 Zurich SWITZERLAND
phone: x-41-1-632-3408 fax: ...-1228 <><
______________________________________________
R-devel@stat.math.ethz.ch mailing list
http://www.stat.math.ethz.ch/mailman/listinfo/r-devel
LEGAL NOTICE\ Unless expressly stated otherwise, this message is ... [[dropped]]