From dwinsemius at comcast.net  Thu Jul 26 00:59:34 2012
From: dwinsemius at comcast.net (David Winsemius)
Date: Wed, 25 Jul 2012 15:59:34 -0700
Subject: [Rd] Convenience function to get unevaluated ... function
	arguments
In-Reply-To: <CACk-te1KNZRVQmE52L30dSoEMB8nE9DzU5avVFP66+yOkBvcBQ@mail.gmail.com>
References: <CACk-te1KNZRVQmE52L30dSoEMB8nE9DzU5avVFP66+yOkBvcBQ@mail.gmail.com>
Message-ID: <D4D70962-54B9-4B5A-B5F7-5CBFF1FFF5F6@comcast.net>


On Jul 24, 2012, at 4:39 PM, Bert Gunter wrote:

> Folks:
>
> Herein is a suggestion for a little R convenience function mainly to
> obtain unevaluated ... function arguments. It arose from a query on
> R-help on how to get these arguments. The standard (I think) idiom to
> do this is via
>
> match.call(expand.dots=FALSE)$...
>
> However, Bill Dunlap pointed out that this repeats the argument
> matching of the function call and suggested a couple of alternatives
> that do not, one of which I've adapted as the following function,fun
> (I'll comment on naming in a second):
>
> fun <- as.list(substitute((...), env = parent.frame()))[-1]

I think instead:

fun <- function() as.list(substitute((...), env = parent.frame()))[-1]

-- 
David.
>
> Typical usage would be:
>
> f <- function(x, ...,y)fun()
>
> e.g.
>
>> f(x = 5,z=sin(a),y=3,stop("oh"),w=warning("Yikes"))
> $z
> sin(a)
>
> [[2]]
> stop("oh")
>
> $w
> warning("Yikes")
>
> It turns out that (surprisingly to me) the substitute idiom is faster
> than the match.call idiom, although the difference appears
> unimportant, since both are so fast. And it is a little slower when
> wrapped into a function, anyway -- I wasn't able to figure out a
> convenient way to wrap the match.call version into a function.
>
> The question is where -- if anywhere -- should this little one-liner
> go? Seems to me that there are 3 possibilities:
> 1. Nowhere. Unnecessary and trivial.  An entirely reasonable response,
> imho; I leave it to guRus to make this judgment.
>
> 2. In with match.call(); in which case a name like match.dots would
> seem appropriate.
>
> 3. In with substitute(); in which case something like substituteDots
> to make the relationship clear might be appropriate.
>
> If R core or others do want to use this, I would be happy to write the
> line or two of additional documentation required (if no one else wants
> to).
>
> And to repeat... I know this is trivial, so no explanation or response
> is needed if it is decided to ignore it.
>
> Best,
> Bert
>
>
>
>
> -- 
>
> Bert Gunter
> Genentech Nonclinical Biostatistics
>
> Internal Contact Info:
> Phone: 467-7374
> Website:
> http://pharmadevelopment.roche.com/index/pdb/pdb-functional-groups/pdb-biostatistics/pdb-ncb-home.htm
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel

David Winsemius, MD
Heritage Laboratories
West Hartford, CT



[Rd] Convenience function to get unevaluated ... function arguments
David Winsemius