Dla dowolnej funkcjiGet nazwy argument funkcji R
f <- function(x, y = 3){
z <- x + y
z^2
}
Chcę być w stanie podjąć nazwy argument f
> argument_names(f)
[1] "x" "y"
to jest możliwe?
Dla dowolnej funkcjiGet nazwy argument funkcji R
f <- function(x, y = 3){
z <- x + y
z^2
}
Chcę być w stanie podjąć nazwy argument f
> argument_names(f)
[1] "x" "y"
to jest możliwe?
formalArgs
i formals
to dwie funkcje, które przydałyby się w tym przypadku. Jeśli chcesz tylko nazwy parametrów, wówczas bardziej przydatne będzie ustawienie formalArgs
, ponieważ po prostu podaje nazwy i ignoruje wszelkie wartości domyślne. formals
podaje listę jako dane wyjściowe i podaje nazwę parametru jako nazwę elementu na liście oraz wartość domyślną jako wartość elementu.
f <- function(x, y = 3){
z <- x + y
z^2
}
> formalArgs(f)
[1] "x" "y"
> formals(f)
$x
$y
[1] 3
Moim pierwszym skojarzeniem było tylko sugerować formals
i jeśli tylko chcieliśmy nazwy parametrów można użyć nazwy jak names(formals(f))
. Funkcja formalArgs
jest właśnie otoką, która robi to za ciebie, więc działa w dowolny sposób.
Edycja: Należy zauważyć, że funkcje prymitywne technicznie nie mają "formals", więc ta metoda zwróci wartość NULL, jeśli jest używana dla elementów pierwotnych. Sposób obejścia polega na tym, aby najpierw owinąć funkcję w args
przed przejściem do formalArgs
. Działa to niezależnie od tego, czy funkcja jest prymitywna czy nie.
> # formalArgs will work for non-primitives but not primitives
> formalArgs(f)
[1] "x" "y"
> formalArgs(sum)
NULL
> # But wrapping the function in args first will work in either case
> formalArgs(args(f))
[1] "x" "y"
> formalArgs(args(sum))
[1] "..." "na.rm"
To nie działa, na przykład dla '^' lub 'log': \ – MichaelChirico
@ Michael Christy Hmmm. Wygląda na to, że wszystko, co jest po prostu opakowaniem dla wywołania typu "pige" ma ten sam problem. – Dason
Tak, próbowałem znaleźć wszystkie jednokrotne funkcje w bazie i wpadłem na ten problem - wszystkie dobre są tylko prymitywnymi owijkami – MichaelChirico
Sprawdź "? Formals' – Dason
Awesome! Obie działają. Zapraszam do odpowiedzi. Przyjmę pierwszy. – landau
help ("args") lub jedna z funkcji tam połączonych. – Roland