[討論] R function 中的三點引數 "..."

作者: andrew43 (討厭有好心推文後刪文者)   2015-06-13 23:35:02
在 R 語言中的 function 可以接受「...」的引數(以下稱三點引數)。
我目前對三點引數的作用有二種理解,以下分別討論。
1. 提供引數給其它 function 用。
三點引數可讓我們很方便地把不確定的引數丟給其它 function 使用,請見下例。
paired.t.test <- function(x, y, ...){
t.test(x, y, paired = T, ...)
}
a <- c(1,2,3); b <- c(2,2,4)
paired.t.test(x = a, y = b) # line 1
paired.t.test(x = a, y = b, mu = 2) # line 2
paired.t.test(x = a, y = b, mu = 2, alternative = "g") # line 3
可以發現,paired.t.test 定義了三點引數,
並再把三點引數再引入 t.test() 中。
因此,line 1 中沒使用三點引數,
或是 line 2 中使用三點引數(mu = 2),
或是 line 3 中的三點引數(mu = 2 及 alternative = "g"),
都可以成功運作。
也可以發現,三點引數特別之處是引用時「可有可無」,
否則 line 1 應該失敗。
2. 用於未指定個數之引數(們)
如果不確定要丟入幾個引數時,三點引數也有特別的用處,請見下例。
listSum <- function(...) {
input <- list(...)
output <- lapply(input, sum)
return(output)
}
listSum(a = c(2,3)) # line 4
listSum(a = 1, b = 2) # line 5
listSum(a = c(1,2,3), b = 2, c(2,3,4,5,6)) # line 6
這個例子中,即使引數 a 和 b 都沒被定義在 listSum() 中,
也可以得到結果。
當然,我是把所有引數都放在同一個 list 中才達成的。
============= 分隔線 ==============
我不知道我舉出的這二種作用是不是很完整,我也還沒完全摸清三點引數。
歡迎各位指教、補充。
作者: celestialgod (天)   2015-06-13 23:58:00
簡單來說就是pass extra elements for specific function in function...其實1, 2應該是一樣的東西
作者: andrew43 (討厭有好心推文後刪文者)   2015-06-14 00:54:00
我目前是把它理解成不定個數的引數,但本質上還是引數。
作者: gsuper (Logit(odds))   2015-06-14 04:32:00
這個好

Links booklink

Contact Us: admin [ a t ] ucptt.com