2017-03-09 47 views
0

如果我寫一個簡單的r功能R功能;一個調用無關的參數;它是如何處理的?

foofunction<-function(x,y) 
{ 
... 
} 

,並不會在函數定義中存在的「silly_option」參數調用它像這樣:

foofunction(x=5,y=10,silly_option=6) 

然後我得到一個錯誤,因爲預計:

unused argument (silly_option = 6) 

在另一方面,爲什麼沒有這個調用返回一個類似的錯誤?

mean(c(1,2,3),silly_option=6) 

Is mean()默默地忽略它或用它做某事嗎?

回答

2

從R控制檯鍵入getAnywhere("mean.default")揭示mean()的源代碼:

function (x, trim = 0, na.rm = FALSE, ...) 
{ 
    if (!is.numeric(x) && !is.complex(x) && !is.logical(x)) { 
     warning("argument is not numeric or logical: returning NA") 
     return(NA_real_) 
    } 
    # ... more code 
} 

base包中的mean.default()函數具有簽名,其中包括可變參數,如簽名中的最後一個參數通過省略號...指示。

所以,我認爲mean()是默默地忽略你的額外參數。

閱讀here瞭解關於R的省略號功能的更多信息。

+1

只是加法 - 如果將foofunction定義爲foofunction <-function(x,y,...),它將停止拋出未使用的參數錯誤。 –

+0

@ R.S。所以作爲一個優秀的設計,這是最好的策略?拋出一個錯誤或默默地忽略多餘的論據?即mean()函數通過忽略多餘的參數而獲得什麼好處? –

+0

@curious_cat有時候這不是最好的策略。如果一個函數接受可變參數,那麼可以傳遞未使用的參數,甚至是不好的參數,並且該函數不會翻轉。換句話說,出於合法原因使用可變參數的人爲因素是未使用的參數也可以被傳遞。 –

相關問題