簡體   English   中英

當內部函數參數取決於可選參數時,將參數傳遞給R

[英]Parameter passing in R when interior function arguments are dependent on optional parameters

我正在R中工作,需要將參數傳遞給函數,以便在原始文件中調用另一個函數時可以將它們用作參數。 在下面的示例中,您可以看到我有興趣在每次調用primaryFunc()時都調用interiorFunc(),但是第一個參數的值取決於第二個參數的存在。 如果我聲明了“ parameter 2”,那么與在函數調用中未聲明“ parameter 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()的定義,以使此示例可重復:

謝謝您的幫助。

我認為常見的策略之一是過濾名稱,

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)

當然,它假定...僅將接收全名實參。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM