Fast Alternative To The Internal do.call
The do.call
can be somewhat slow,
especially when working with large objects. This function
is based upon the suggestions from Hadley Wickham on the R
mailing list, see
here.
Also thanks to Tommy at StackOverflow for
suggesting
how to handle double and triple colon operators, ::
,
further enhancing the function.
DoCall(what, args, quote = FALSE, envir = parent.frame())
what |
either a function or a non-empty character string naming the function to be called. |
args |
a list of arguments to the function
call. The |
quote |
a logical value indicating whether to quote the arguments. |
envir |
an environment within which to evaluate the
call. This will be most useful if |
While the function attempts to do most of what
do.call
can it has limitations. It
can currently not parse the example code from the
original function: do.call(paste,
list(as.name("A"), as.name("B")), quote = TRUE)
and the
funcitonality of quote
has not been thoroughly
tested.
This is a verbatim copy from Gmisc::fastDoCall.
Max Gordon <max@gforge.se>
DoCall("complex", list(imaginary = 1:3)) ## if we already have a list (e.g. a data frame) ## we need c() to add further arguments tmp <- expand.grid(letters[1:2], 1:3, c("+", "-")) DoCall("paste", c(tmp, sep = "")) ## examples of where objects will be found. A <- 2 f <- function(x) print(x^2) env <- new.env() assign("A", 10, envir = env) assign("f", f, envir = env) f <- function(x) print(x) f(A) # 2 DoCall("f", list(A)) # 2 DoCall("f", list(A), envir = env) # 4 DoCall(f, list(A), envir = env) # 2 DoCall("f", list(quote(A)), envir = env) # 100 DoCall(f, list(quote(A)), envir = env) # 10 DoCall("f", list(as.name("A")), envir = env) # 100 eval(call("f", A)) # 2 eval(call("f", quote(A))) # 2 eval(call("f", A), envir = env) # 4 eval(call("f", quote(A)), envir = env) # 100
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.