小编典典

在 R 函数中指定可选参数的“正确”方法

all

我对在 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”。


阅读 61

收藏
2022-06-24

共1个答案

小编典典

您还可以missing()用来测试是否y提供了参数:

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

fooBar(3,1.5)
# [1] 4.5
fooBar(3)
# [1] 3
2022-06-24