2017-04-12 64 views
2

假設我有一個帶有許多參數的函數(例如,plot())。如何避免在R中的包裝函數中重新列出內部函數參數?

我想通過圍繞該函數創建一個包裝函數來爲該函數添加一些功能。

  • 隨便舉個例子:

    plot.new <- function() { 
        windows(width = 10, height = 10) 
        plot() 
    } 
    

我的問題:我如何讓這個內部函數的參數可以在我的新的包裝功能來提供?

  • 如何在定義包裝函數時不從內部函數重新輸入所有參數名稱的情況下這樣做?

回答

2

可以使用three dots ellipsis

plot.new <- function(...) { 
    windows(width = 10, height = 10) 
    plot(...) 
} 

如果你想明確地包括任何在包裝功能列表中的內部函數的參數,你必須明確地定義內部功能這樣的說法好:

plot.new <- function(x, ...) { 
    graphics.off() #OPTIONAL 
    windows(width = 10, height = 10) 
    plot(x = x, ...) 
} 

#USAGE 
plot.new(x = rnorm(10), y = rnorm(10), pch = 19) 

And here is more discussion on using to distribute the arguments to multiple internal functions.

+0

他們是否需要同時存在於論證列表位置? – theforestecologist

+0

如果我「重用」參數名稱(或者選擇只定義一個內部函數的參數),會發生什麼?例如:'plot.new < - function(x,...){plot(...)}' – theforestecologist

+0

最後一個問題:我可以在包裝函數參數列表中的任何位置放置省略號嗎?例如:'function(...,z)'vs'function(z,...)'?如果是這樣,如果我選擇在運行包裝器函數時不命名它們,是否會決定參數的「排序」? – theforestecologist

相關問題