2011-11-01 69 views
38

我有一個函數f採用兩個參數(p1p2):測試一個函數的一個參數被設置或不中的R

如果用於參數p2沒有值被傳遞給函數,該值應該使用p1^2來代替。但是如何在函數中找到值,如果給出值或不。問題是如果沒有值,變量p2未被初始化。因此我無法測試p2NULL

f <- function(p1, p2) { 
    if(is.null(p2)) { 
     p2=p1^2 
    } 
    p1-p2 
} 

是它在某種程度上可以確認如果p2一個值傳遞給函數或沒有? (我找不到isset() - 功能或類似的東西。)

回答

46

您可以使用功能missing()

f <- function(p1, p2) { 
    if(missing(p2)) { 
     p2=p1^2 
    } 
    p1-p2 
} 

或者,您可以將p2的值默認設置爲NULL。我有時更喜歡這個解決方案,因爲它允許將參數傳遞給嵌套函數。

f <- function(p1, p2=NULL) { 
    if(is.null(p2)) { 
     p2=p1^2 
    } 
    p1-p2 
} 

f.wrapper <-function(p1,p2=NULL){ 
    p1 <- 2*p1 
    f(p1,p2) 
} 
> f.wrapper(1) 
[1] -2 
> f.wrapper(1,3) 
[1] -1 

編輯:你可以用missing()技術上也這麼做,但你必須包括在f.wrapper一個missing()聲明爲好。

+1

+1。 Re:你添加的編輯,你如何通過包裝函數傳遞'missing''? –

+0

@ JoshO'Brien通過「失蹤」是複雜的AFAIK - 但可能的。這就是爲什麼'NULL'在這種情況下更容易。 – Tommy

+0

...因此,可能需要另外一個問題來傳遞缺少的內容。 – Tommy

7

我覺得'失蹤'應該這樣做。

相關問題