我在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()的定义,使这个例子可以重现:
感谢您的帮助。
答案 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)
当然,假设...
只会收到完全命名的参数。