Me encontré con esta pregunta mientras buscaba algo relacionado. Si bien me doy cuenta de que esto tiene varios años, las respuestas parecen insatisfactorias y no parece haber ninguna solución estándar para la pregunta.
Es posible hacer una solución alternativa (poco elegante), utilizando una combinación de las funciones formalsy environment. El siguiente ejemplo extrae argumentos del entorno utilizando nombres extraídos de formales, luego agrega la lista de puntos suspensivos. Si desea tener los valores como se establecieron en el momento de la llamada a la función, establezca el argumento orig_values en TRUE. La función solo incluye variables establecidas implícita o explícitamente en la llamada a la función.
allargs <- function(orig_values = FALSE) {
parent_formals <- formals(sys.function(sys.parent(n = 1)))
fnames <- names(parent_formals)
fnames <- fnames[-which(fnames == '...')]
args <- evalq(as.list(environment()), envir = parent.frame())
args <- c(args[fnames], evalq(list(...), envir = parent.frame()))
if(orig_values) {
defargs <- as.list(parent_formals)
defargs <- defargs[unlist(lapply(defargs, FUN = function(x) class(x) != "name"))]
args[names(defargs)] <- defargs
setargs <- evalq(as.list(match.call())[-1], envir = parent.frame())
args[names(setargs)] <- setargs
}
return(args)
}
tempf <- function(a, b = 2, ...) {
d <- 5
b <- 3
cat("Currently set values defined in call or formals\n")
print(allargs())
cat("Values as defined at the time of the call\n")
print(allargs(T))
}
tempf(1, c = 3)
Currently set values defined in call or formals
$a
[1] 1
$b
[1] 3
$c
[1] 3
Values as defined at the time of the call
$a
[1] 1
$b
[1] 2
$c
[1] 3