我对在R中使用可选论点编写功能的"正确"的方法感兴趣。随着时间的流逝,我偶然发现了一些在这里采用不同路线的代码,但找不到适当的(官方)位置关于这个话题。

到目前为止,我已经写了这样的可选论点:

fooBar <- function(x,y=NULL){
  if(!is.null(y)) x <- x+y
  return(x)
}
fooBar(3) # 3
fooBar(3,1.5) # 4.5

该函数仅返回其参数x提供。它使用默认NULL对于第二个参数的价值,如果该论点恰好不是NULL,然后添加两个数字。

另外,可以这样写这样的函数(其中第二个参数需要按名称指定,但也可以unlist(z)或定义z <- sum(...)反而):

fooBar <- function(x,...){
  z <- list(...)
  if(!is.null(z$y)) x <- x+z$y
  return(x)
}
fooBar(3) # 3
fooBar(3,y=1.5) # 4.5

我个人更喜欢第一个版本。但是,我可以看到两者的好坏。第一个版本不易出错,但是第二个版本可用于合并任意数量的选项。

是否有一种"正确"的方法来指定R中的可选参数?到目前为止,我已经解决了第一种方法,但两者都有偶尔会感到有些" hacky"。

答案

你也可以使用missing()测试该论点是否y被提供:

fooBar <- function(x,y){
    if(missing(y)) {
        x
    } else {
        x + y
    }
}

fooBar(3,1.5)
# [1] 4.5
fooBar(3)
# [1] 3

来自: stackoverflow.com