¿R proporciona un objeto / función / método / palabra clave para obtener todos los argumentos de la función?
Usando un ejemplo:
function(a, b="default", ...)proporcionaría ay basí como ...dentro del entorno de la función. ¿Hay una declaración similar a la list(...)que también incluiría ay ben el resultado?
O dicho de otra manera: una abreviatura de list(a=a, b=b, ...), dadofunction(a, b, ...)

Respuestas:
Creo que quieres
match.call:tmpfun <- function(a,b,...) { print(as.list(match.call())) print(as.list(match.call(expand.dots=FALSE))) } > tmpfun(a=1, b=2, c=3, d=4) [[1]] tmpfun $a [1] 1 $b [1] 2 $c [1] 3 $d [1] 4 [[1]] tmpfun $a [1] 1 $b [1] 2 $... $...$c [1] 3 $...$d [1] 4fuente
...como parámetro)?c(as.list(environment()), list(...))que captura tanto los argumentos predeterminados como los argumentos proporcionados.Una solución es utilizar:
tempf <- function(a, b = 2, ...) { argg <- c(as.list(environment()), list(...)) print(argg) } tempf(1, c = 3) $a [1] 1 $b [1] 2 $c [1] 3Esto crea una lista con nombre de los valores de los argumentos.
fuente
...como parámetro)?argg <- c(as.list(environment()), list(...))al principio de la función. De lo contrario,environment()terminará incluyendo otras variables que se crean dentrotempf()prueba la
argsfunción¿Cuáles son los argumentos a favor de la
meanfunción?> args(mean) function (x, ...) NULL¿Y la
lmfunción?> args(lm) function (formula, data, subset, weights, na.action, method = "qr", model = TRUE, x = FALSE, y = FALSE, qr = TRUE, singular.ok = TRUE, contrasts = NULL, offset, ...) NULLSi desea obtener una lista de argumentos, intente
fuente
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
formalsyenvironment. 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) { # get formals for parent function parent_formals <- formals(sys.function(sys.parent(n = 1))) # Get names of implied arguments fnames <- names(parent_formals) # Remove '...' from list of parameter names if it exists fnames <- fnames[-which(fnames == '...')] # Get currently set values for named variables in the parent frame args <- evalq(as.list(environment()), envir = parent.frame()) # Get the list of variables defined in '...' args <- c(args[fnames], evalq(list(...), envir = parent.frame())) if(orig_values) { # get default 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] 3fuente
Creo que estas buscando
formals:formals(sd) $x $na.rm [1] FALSEY usar
dputesto le da el formulario que especifica en la pregunta:dput(formals(sd)) list(x = , na.rm = FALSE)Tenga en cuenta que
formalsno funciona para funciones primitivas , solo cierres.fuente
test <- function( x = 1, y = 2, ... ) { if(length(list(...)) == 0) { print(as.list(environment())) } else { print(c(as.list(environment()), list(...))) } } test() test(z = 3)fuente
rlang::fn_fmlsda una solución breve y limpia:library(ggplot2) library(rlang) # action argument_list <- rlang::fn_fmls(fn = geom_point) # evaluate output class(argument_list) #> [1] "pairlist" is.list(argument_list) #> [1] TRUE argument_list #> $mapping #> NULL #> #> $data #> NULL #> #> $stat #> [1] "identity" #> #> $position #> [1] "identity" #> #> $... #> #> #> $na.rm #> [1] FALSE #> #> $show.legend #> [1] NA #> #> $inherit.aes #> [1] TRUECreado el 2020-02-25 por el paquete reprex (v0.3.0)
fuente