【问题标题】:Parameter passing in R when interior function arguments are dependent on optional parameters当内部函数参数依赖于可选参数时,R 中的参数传递
【发布时间】:2013-05-19 23:10:22
【问题描述】:

我在 R 中工作,需要将参数传递给函数,以便在调用原始函数中的另一个函数时将它们用作参数。在下面的示例中,您可以看到每次调用 primaryFunc() 时我都对调用 internalFunc() 感兴趣,但第一个参数的值取决于第二个参数的存在。如果我声明“参数 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”值是否已传入。这是一个内部函数()的定义,以使该示例可重现:

感谢您的帮助。

【问题讨论】:

  • 就目前的问题而言,您可以简单地测试传递了多少额外参数,如length(list(...))
  • 感谢您的回复。我想我应该让我的可重现示例更加真实。 internalFunc() 实际上有很多参数(大约 10 个),大约 6 个是可选的,但只有一个具有本示例中 parameter2 的效果,其他所有参数都可以指定而不影响 primaryFunc()。
  • 我认为那会是:)

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


【解决方案1】:

我认为一种常见的策略是过滤名称,

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)

当然,它假定... 只会接收全名参数。

【讨论】:

  • 更常见的方法是让param = NULL 成为main 的参数,使用if(is.null(param)),然后显式传递下去。
  • 可能;让我们称之为处理从...中提取特定参数的更常见方法
猜你喜欢
  • 2019-03-17
  • 2014-01-03
  • 1970-01-01
  • 1970-01-01
  • 2018-09-26
  • 2019-03-29
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多