R ...(dots) 参数使用方式

2023-08-07  本文已影响0人  DataScience

介绍

当你不确定一个函数有多少个参数输入时,可以使用...参数占位。例如R的打印函数?print

print(x, ...) # ... further arguments passed to or from other methods.

help文档点出了使用方式:传递给其他方法或从其他方法传递,意思就是说有多层函数,参数由外层向内层函数传递,包括两种情况:

  1. 有参数名:
f <- function(v,...){
    mean(v, ...)
}
f(c(1,2,NA,3), na.rm = TRUE) # 2
  1. 无参数名:
h <- function(...){
    inputs <- list(...)
    # 一些操作
    ...
}

进一步,可以根据传入的顺序捕获参数:

g <- function(...){
    paste0("第一个参数是:", ..1,
            ",第二个参数是:", ..2,
            ",第三个参数是:", ..3
    )
}
g(1,2,3) # [1] "第一个参数是:1,第二个参数是:2,第三个参数是:3"

如果参数是...,但是输入的多个参数保存在一个list里面,可以使用以下方式:

do.call(g, list(1, 2, 3))
# [1] "第一个参数是:1,第二个参数是:2,第三个参数是:3"

补充

此外,存在一些衍生函数用于提取...参数特征,如下:

f <- function(...){
    print(...length()) # 提取...参数长度
    print(...names()) # 提取...参数名字
    print(...elt(2)) # 相当于..<n>
}

f(1,x=2,3,4)
# [1] 4
# [1] ""  "x" ""  ""
# [1] 2
上一篇 下一篇

猜你喜欢

热点阅读