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

Bert Gunter gunter.berton at gene.com
Thu Jul 26 17:12:47 CEST 2012


Feel free.

-- Bert

On Thu, Jul 26, 2012 at 7:52 AM, Warnes, Gregory
<gregory.warnes at novartis.com> wrote:
> I'll be glad to add it to the gtools package if it doesn't (immediately) go into one of the core packages.
>
> Sent from my iPhone
>
> On Jul 26, 2012, at 7:35 AM, "Bert Gunter" <gunter.berton at gene.com> wrote:
>
>> 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
>>
>> ______________________________________________
>> R-devel at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel



-- 

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



More information about the R-devel mailing list