2013-05-07 137 views
0

隨着我的項目變得越來越大,我發現很難跟蹤所有參數。在R中是否有任何有效的方法,從而在結構中聚集參數?R函數參數

例如,在我的節目之一,如果

take.bus = TRUE 

然後下面的參數將被使用。

bus.number 
bus.route 
bus.stop 

由於我的程序真的很大,有幾個這樣的例子,參數的使用依賴於一個變量。我在考慮在take.bus爲FALSE時是否可以避免顯示相關參數(即bus.number)。

我不確定這個問題是否適合這裏。評論它是否有問題。

編輯:

爲了更精確:考慮下面的函數:

function(take.bus,bus.number, bus.route, bus.stop){ 

    if(take.bus == T){ 
    x<-temp.func(bus.number,bus.route,bus.stop) 
    } 
} 

所以沒有次級參數 「bus.number,bus.route,bus.stop」,將用於如果「take.bus == F」

+3

我認爲這個問題很好,但我認爲一些細節不會受到傷害。例如,你的意思是「...然後使用下列參數」?如果'take.bus'的計算結果爲TRUE,那麼可以爲這些參數賦值,如果不是,它們會得到一個NULL值或者根本沒有被使用? – 2013-05-07 15:16:00

+0

我的參數輸入有超過20個參數,但其中大部分參數與上面的示例類似,如果一個參數「打開或關閉」,它們是否將被使用將完全基於。 – user1234440 2013-05-07 15:28:36

+0

@ user1234440如果這三個變量不用於特定的函數調用,則不必提供它們,即'f(FALSE)'不會引發錯誤。 – 2013-05-07 15:37:32

回答

0

如果這三個參數沒有在特定的函數調用中使用,則不必提供它們,也就是說,f(FALSE)不會產生錯誤。

這是R處理參數傳遞的一個特性,與其他流行語言稍有不同。對於特定的函數調用,R不會評估提供的參數(丟失或不提供),除非實際需要參數來執行該函數。

0

馬修的答案在某些情況下有效,但是你會發現,如果你甚至在塊內使用參數,如果它們沒有提供並且沒有默認值,你會得到一個錯誤。所以:

many <- function(one, two, three) {print (one);} 
many("bob") 
> "bob" 

工作正常,但

more <- function(one, two, three) { 
    print (one) 
    if(!is.null(two)) { 
    print(two) 
    } 
} 
more("bob") 
> [1] "bob" 
> Error in is.null(two) : 'two' is missing 

是有問題的。您可以爲參數分配默認值null,但是您會希望實際傳入參數。您可以使用ellipsis傳遞任意數量的參數(您可以選擇將其命名)。檢查省略號的邊界有點棘手。有關更多信息,請參見here

另外。

請勿使用「T」和「F」!

我可以指定T <- FALSEF <- TRUE,因爲它們不是保留字。