Могут быть случаи, когда вы не захотите вызывать list(...)
, поскольку при этом будут оцениваться все выражения в точках.Например,
myFun <- function(x, y, ...){
myArgs <- list(...)
zInArgs <- ("z" %in% names(myArgs))
return(zInArgs)
}
myFun(x = 2, y = "Happy", z = list(rep(rnorm(2e6), 100)))
Это займет много времени.Вместо этого используйте match.call()
:
myFun <- function(x, y, ...){
myArgs <- match.call()
zInArgs <- ("z" %in% names(myArgs))
return(zInArgs)
}
myFun(x = 2, y = "Happy", z = list(rep(rnorm(2e6), 100)))
. Первый пример все еще загружается на моей машине, тогда как второй пример вообще не должен занимать время.
РЕДАКТИРОВАТЬ:
Чтобы ответить на комментарий @CarlWitthoft:
R> system.time(
+ (myAns <- myFun(x = 2, y = "Happy", z = list(rep(rnorm(2e6), 100))))
+ )
user system elapsed
0 0 0
R> myAns
[1] TRUE