DoCall {DescTools} | R Documentation |
Fast Alternative To The Internal do.call
Description
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 (reference not available anymore).
Also thanks to Tommy at StackOverflow for
suggesting
how to handle double and triple colon operators, ::
,
further enhancing the function.
Usage
DoCall(what, args, quote = FALSE, envir = parent.frame())
Arguments
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 |
Note
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.
Note
This is a verbatim copy from Gmisc::fastDoCall.
Author(s)
Max Gordon <max@gforge.se>
Examples
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