2016-12-25 172 views
1

accepted answer on how to "correctly" specify optional arguments in R一個評論,@LouisMaddox說,當你想使用,雖然提供的參數的適當檢查,對列表R根據值列表正確檢查提供的參數?

missing()是沒用的。對於函數Foo與參數bar和可選開關a_or_b(默認值「a」),你可以寫Foo <- function(bar, a_or_b=c("a", "b")) ...

是否有適當的/推薦/慣用針對可能的值的列表,檢查提供的參數方式?

我想看看graphics::plot.default並在graphics::par瞥見,但不能做任何事情,這兩個功能的理解(見type參數例如如何處理)。

type參數例子的情況下,所有可能的值是一個字母串,所以我想的地方,有一個大的switch陳述或一堆if聲明。

+0

有此類似的討論,我創建了一個小型封裝爲:https://開頭計算器.com/a/42987798/4468078 –

回答

1

如果您有少量選項,請在該函數內使用match.arg。例如,請參閱?match.arg

如果有效的參數是所有一個字母串,那麼你就需要另一種方法,如:

# returns logical 
is_one_letter_string <- function(x) { 
    !missing(x) && length(x) == 1 && is.character(x) && x %in% c(letters, LETTERS) 
} 
+0

對於這個問題,你的答案已足夠,謝謝。我需要更多關於如何在R中執行多態的東西的信息(在少數用例中減少大開關語句的使用),但那是一段時間以後的事情。 –

+0

試試這個:'myfun < - function(x,...)if(is_one_letter_string(x))do.call(paste0(「run_」,x),list(...))'假設你有函數run_a ','run_b'等。 –