2016-11-16 65 views
5

的參數名對於任意函數獲取的R功能

f <- function(x, y = 3){ 
    z <- x + y 
    z^2 
} 

我希望能夠採取的f

> argument_names(f) 
[1] "x" "y" 

參數名這可能嗎?

+3

退房'?formals' – Dason

+0

太棒了!兩者都有效。隨時回答。我會接受第一個。 – landau

+0

幫助(「args」)或其中的一個功能。 – Roland

回答

10

formalArgsformals是在這種情況下有用的兩個功能。如果你只是想要參數名稱,那麼formalArgs會更有用,因爲它只是給出名稱並忽略任何默認值。 formals給出一個列表作爲輸出,並提供參數名稱作爲列表中元素的名稱和默認值作爲元素的值。

f <- function(x, y = 3){ 
    z <- x + y 
    z^2 
} 

> formalArgs(f) 
[1] "x" "y" 
> formals(f) 
$x 


$y 
[1] 3 

我的第一個傾向是隻是建議formals,如果你只是想在參數的名稱,你可以使用的名稱,如names(formals(f))formalArgs功能只是一個包裝,它可以幫助你做到這一點。

編輯:請注意,技術上原始函數沒有「形式」,所以如果在基元上使用此方法將返回NULL。解決方法是首先在args中包裝函數,然後傳遞給formalArgs。不管它是什麼,它都可以工作。

> # 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" 
+0

這不適用於例如'^'或'log':\ – MichaelChirico

+0

@MichaelChiricoHmmm。看起來像任何只是一個.primitive調用的包裝都有同樣的問題。 – Dason

+0

是啊我試圖找到所有基於一個參數的功能,並遇到了這個問題 - 所有好的只是原始包裝 – MichaelChirico