Bert Gunter
2012-Jul-24 23:39 UTC
[Rd] Convenience function to get unevaluated ... function arguments
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] 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
David Winsemius
2012-Jul-25 22:59 UTC
[Rd] Convenience function to get unevaluated ... function arguments
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-develDavid Winsemius, MD Heritage Laboratories West Hartford, CT
Reasonably Related Threads
- Please delete my e-mail judit.barroso@montana.edu
- Factor to numeric conversion - as.numeric(levels(f))[f] - Language definition seems to say to not use this.
- Opinion: Why I find factors convenient to use
- Fortune? -- was Re: optim with simulated annealing SANN ...
- Fortune nomination