3

我在R工作,需要傳遞參數,以便他們可以調用原有內的另一個功能時,可作爲自變量的函數。在下面的示例中,您可以看到每次調用primaryFunc()時都有興趣調用interiorFunc(),但第一個參數的值取決於第二個參數的存在。如果我聲明'parameter 2',那麼我需要一個不同的參數集,而不是在函數調用中聲明'parameter 2'。下面是內部函數的定義:參數R中時,通過內部函數的參數都依賴於可選參數

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) 

,所以我需要去。termine在調用內部函數,如果它是「參數2」值已經被通過下面是interiorFunc的定義()使這個例子重複性:

謝謝您的幫助。

+1

的問題,因爲它代表,你可以簡單地考多少額外的參數傳遞,如'長度(列表(...))' – baptiste

+0

感謝您的答覆。我想我應該讓我的可重現的例子更現實。 innerFunc()實際上需要許多參數(大約10),大約6個是可選的,但只有一個參數具有參數2在這個例子中的作用,所有其他參數可以在不影響primaryFunc()的情況下被指定。 – tjnel

+0

我認爲這將是:) – baptiste

回答

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) 

其中,當然,假設只有...將獲得充分命名的參數。

+0

更常見的方法是使'param = NULL'作爲'main'的參數,使用'if(is.null(param))',並明確地傳遞它。大概是 – flodel

+0

;讓我們把它稱爲處理從'...'提取特定參數的更常見的方法 – baptiste