当内部函数参数依赖于可选参数时,传入R的参数

时间:2013-05-19 23:10:23

标签: r function parameters parameter-passing optional-parameters

我在R中工作,需要将参数传递给函数,以便在调用原始函数中的其他函数时可以将它们用作参数。在下面的示例中,您可以看到我每次调用primaryFunc()时都对调用interiorFunc()感兴趣,但第一个参数的值取决于是否存在第二个参数。如果我声明'参数2',那么我想要一组不同的参数,而不是在函数调用中没有声明'参数2'。以下是内部功能的定义:

interiorFunc(data, resp, param1, param2)
{
  if(missing(param2)) 
  { 
    print(paste("Do analysis without parameter 2 on dataset of size",nrow(data),"with response",resp)
  }else{
    print(paste("Do analysis with parameter 2 on dataset of size",nrow(data),"with response",resp))
  }

}

这是调用它的函数:

primaryFunc <- function(dataset, ...)
{
  if(parameter 2 has been declared in the call to primaryFunc)
  {
    results <- interiorFunc(dataset, ...)
  }else{
    modifedData <- sample(dataset, 2*dataset, replace = TRUE)
    results <- interiorFunc(modifiedData, ...)
  }

  return(results)
}

函数调用可以是:

interiorFuncResults <- primaryFunc(dataset, response, parameter1)

interiorFuncResults <- primaryFunc(dataset, response, parameter1, parameter2)

所以我需要在调用内部函数之前确定它是否传入了'parameter2'值。这里有一个interiorFunc()的定义,使这个例子可以重现:

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

我认为其中一个常见策略是过滤名称,

sub <- function(x, y, param=NULL, ...){
  if(!is.null(param))
    message(param, "is being used") else
      message("not seeing it")
}

main <- function(a=1, b=2, ..., c=3){

  dots <- list(...)

  if("param" %in% names(dots))
    sub(a, b, ...) else
      sub(a, b, ...)

}

main(z=2)

main(param = 2)

当然,假设...只会收到完全命名的参数。