ggtitle - Obtener todos los parámetros como lista
ggplot title center (5)
¿R proporciona un objeto / función / método / palabra clave para obtener todos los argumentos de función?
Usando un ejemplo: function(a, b="default", ...)
proporcionaría a
y b
así como ...
dentro del entorno de la función. ¿Hay una declaración similar a la list(...)
que también incluiría a
y b
en el resultado?
O dicho de otra manera: una abreviatura para la list(a=a, b=b, ...)
, function(a, b, ...)
dada function(a, b, ...)
Creo que estas buscando formals
:
formals(sd)
$x
$na.rm
[1] FALSE
Y usar dput
en esto le da el formulario que especifica en la pregunta:
dput(formals(sd))
list(x = , na.rm = FALSE)
Tenga en cuenta que los formals
no funcionan para funciones primitivas , solo cierres.
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] 4
Me topé con esta pregunta mientras buscaba algo relacionado. Aunque 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 formals
y del environment
. El siguiente ejemplo extrae los argumentos del entorno utilizando nombres extraídos de los formales, luego agrega la lista de puntos suspensivos. Si desea tener los valores tal como se establecieron al 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] 3
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] 3
Esto crea una lista con nombre de los valores de argumento.
prueba la función args
¿Cuáles son los argumentos para la función mean
?
> args(mean)
function (x, ...)
NULL
¿Qué pasa con la función lm
?
> 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, ...)
NULL
Si quieres obtener una lista de argumentos prueba
as.list(args(lm))