[R] Selective 'expansion' of arguments in a match.call() result ...
Gabor Grothendieck
ggrothendieck at gmail.com
Thu May 31 16:14:52 CEST 2007
Try this:
# ith arg is expanded if expand[[i]] is TRUE where expand is
# extended to vector of same length as ... .
# default is to expand all args if 1st arg is "character"
example2 <- function(..., expand = is.character(..1)) {
L <- list(...)
expand <- rep(expand, length = length(L))
mc <- match.call()
mc$expand <- NULL
for(i in which(expand)) mc[[i+1]] <- L[[i]]
mc
}
# test
a <- b <- 1
example2(a, b)
d <- "a"
example2(d, b)
example2(a, b, expand = TRUE)
example2(a, b, expand = c(TRUE, FALSE))
On 5/31/07, Roberto Brunelli <brunelli at itc.it> wrote:
> Is it possible to write a support function to automatize selective
> argument expansion (based on argument value type) as in the following
> example, in order to write terse code even when there are many
> arguments? Forcing evaluation of all arguments is not a problem ...
>
> ______________________________________________Thanks a lot!__________R_
>
> # When called with document = 1, we have the simple match.call() result,
> # when document = 2 and name is a string, it is expanded, otherwise it
> # is not
>
> example <- function (name, document = FALSE) {
>
> print(name)
>
> if(document == 1) {
> resh <- match.call()
> } else if (document == 2) {
> resh <- match.call()
>
> if(is.character(name)) {
> resh$name <- name
> }
> resh$document <- document
> } else {
> resh <- call("<undef>")
> }
>
> resh
> }
>
> > a <- "Roberto"
> > b <- 1
> > example(a, document = 1)
> [1] "Roberto"
> example(name = a, document = 1)
> > example(a, document = 2)
> [1] "Roberto"
> example(name = "Roberto", document = 2)
> > example(b, document = 2)
> [1] 1
> example(name = b, document = 2)
> >
>
> --
> <r/>
> | Roberto Brunelli - [scientist at Fondazione Bruno Kessler-irst]
> | 'Home can be anywhere, for it is a part of one's self'
>
> ------------------
> ITC -> dall'1 marzo 2007 Fondazione Bruno Kessler
> ITC -> since 1 March 2007 Fondazione Bruno Kessler
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>
More information about the R-help
mailing list