From gunter.berton at gene.com  Thu Jul 26 07:47:01 2012
From: gunter.berton at gene.com (Bert Gunter)
Date: Wed, 25 Jul 2012 22:47:01 -0700
Subject: [Rd] Convenience function to get unevaluated ... function
	arguments
In-Reply-To: <D4D70962-54B9-4B5A-B5F7-5CBFF1FFF5F6@comcast.net>
References: <CACk-te1KNZRVQmE52L30dSoEMB8nE9DzU5avVFP66+yOkBvcBQ@mail.gmail.com>
	<D4D70962-54B9-4B5A-B5F7-5CBFF1FFF5F6@comcast.net>
Message-ID: <CACk-te0KRK4hYga3PX+CVKfX79n4NV7UsFbB8_GKs-pS2g7yJg@mail.gmail.com>

Indeed!

-- Bert

On Wed, Jul 25, 2012 at 3:59 PM, David Winsemius <dwinsemius at comcast.net> wrote:
>
> 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
>



-- 

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



[Rd] Convenience function to get unevaluated ... function arguments
Bert Gunter