我在 R 中有一個帶有很多默認引數的函式,我想多次使用它們。我希望能夠改變那些而不必一直寫下去。
這在 Python 中很容易,如下所示:
def f(x, y, optional1=1, optional2=2, optional3=3):
return (x y optional1 optional2 optional3)
args = (10, 20)
print(f(1,2, *args)) #this prints 36 = 1 2 10 20 3
現在我有一個 R 函式,f = function(x,y, optional1=1, optional2=2, optional3=3)但我還沒有找到一種方法來做類似于上面的例子。
我希望可以用省略號 (...) 做些什么,但似乎這僅適用于函式定義中可變數量的引數。
做類似的事情
g = function(x,y){
return(f(x,y, 10, 20, 30)
}
會作業,但我想知道是否有一種更清晰、更易讀的方法來做到這一點。
謝謝。
uj5u.com熱心網友回復:
有幾種方法,但您可以使用do.call().
f <- function(x, y, optional1 = 1, optional2 = 2, optional3 = 3){
return(x y optional1 optional2 optional3)
}
f(1, 2, 10, 20)
# [1] 36
使用do.call()這將如下所示。
args <- list(optional1 = 10, optional2 = 20)
do.call(f, c(x = 1, y = 2, args))
# [1] 36
另一種使用方式可以rlang節省一些打字的時間,但通常是一樣的。
library(rlang)
exec(f, x = 1, y = 2, !!!args)
#[1] 36
如果你經常這樣做,你可以采用你開始的方法并包裝一個函式。
g <- function(x, y, arg_list) {
do.call(f, c(x = x, y = y, arg_list))
}
g(1, 2, args)
# [1] 36
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/327762.html
