[讨论] 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