R语言写函数时一个三个点的参数是干嘛的?

2020-12-24  本文已影响0人  灵魂工具人

我喜欢看开源库的源码,在看一些R包的源码的时候,经常会碰到函数里面有一个名称是三个点(即省略号,专业术语叫ellipsis,姑且翻译为省略参数吧)的参数。例如,limma包的一个函数是这样写的:

avereps.default <- function(x,ID=rownames(x),...)

这个参数的作用是啥呢?我们来试验一下:

f1 <- function (x, y, ...) {
  z <- list(...)
  print(z)
}
f1(1, 2, 3, 4, 5)

会输出:

[[1]]
[1] 3

[[2]]
[1] 4

[[3]]
[1] 5

看到没有,其实就是把1、2后面的参数都放到省略参数的意思。

那这个参数一般怎么用呢?

省略参数的使用场景一般有两个:

  1. 参数不固定长度

例如:

my_sum <- function (...) {
  # 只为了演示如何使用
  # 现实中不能这么写
  total <- 0
  for (i in list(...)) {
    total <- total + i
  }
  return(total)
}
my_sum(1, 2, 3)
my_sum(1, 2, 3, 4)
  1. 兼容其他函数的参数

如果我的函数里面要调用其他函数,如果只是直接往这个函数里面传的话,可以使用省略参数。例如:

my_print <- function (...) {
  print(...)
}

一般第二种使用场景用的比较多。

上一篇下一篇

猜你喜欢

热点阅读