2016-12-25 173 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'等。 –