介紹
當(dāng)你不確定一個(gè)函數(shù)有多少個(gè)參數(shù)輸入時(shí)胆屿,可以使用...
參數(shù)占位箭养。例如R的打印函數(shù)?print
:
print(x, ...) # ... further arguments passed to or from other methods.
help文檔點(diǎn)出了使用方式:傳遞給其他方法或從其他方法傳遞慕嚷,意思就是說有多層函數(shù),參數(shù)由外層向內(nèi)層函數(shù)傳遞毕泌,包括兩種情況:
- 有參數(shù)名:
f <- function(v,...){
mean(v, ...)
}
f(c(1,2,NA,3), na.rm = TRUE) # 2
- 無參數(shù)名:
h <- function(...){
inputs <- list(...)
# 一些操作
...
}
進(jìn)一步喝检,可以根據(jù)傳入的順序捕獲參數(shù):
g <- function(...){
paste0("第一個(gè)參數(shù)是:", ..1,
",第二個(gè)參數(shù)是:", ..2,
",第三個(gè)參數(shù)是:", ..3
)
}
g(1,2,3) # [1] "第一個(gè)參數(shù)是:1,第二個(gè)參數(shù)是:2,第三個(gè)參數(shù)是:3"
如果參數(shù)是...,但是輸入的多個(gè)參數(shù)保存在一個(gè)list里面撼泛,可以使用以下方式:
do.call(g, list(1, 2, 3))
# [1] "第一個(gè)參數(shù)是:1,第二個(gè)參數(shù)是:2,第三個(gè)參數(shù)是:3"
補(bǔ)充
此外挠说,存在一些衍生函數(shù)用于提取...
參數(shù)特征,如下:
f <- function(...){
print(...length()) # 提取...參數(shù)長度
print(...names()) # 提取...參數(shù)名字
print(...elt(2)) # 相當(dāng)于..<n>
}
f(1,x=2,3,4)
# [1] 4
# [1] "" "x" "" ""
# [1] 2