在R中匹配函数arg

时间:2012-11-10 00:47:21

标签: r function arguments

我在R take中有一个函数可以采用一些默认值或自定义用户函数:

myfun = function(x = c('funA', 'funB', 'funC'), customFUN = NULL)
{
}

如果用户为x选择任何默认列出的值,则将忽略customFUN。 在R中处理这个问题的最佳方法是什么?

我可以使用

myfun = function(x = c('funA', 'funB', 'funC'), customFUN = NULL)
{

  if (! is.null(customFUN)) {
    choosenFUN = match.fun(customFUN)
  }
  else {
    choosenFUN.string = match.arg(x)

    if (choosenFUN == 'funA')
       choosenFUN = algorithmA
    else if (choosenFUN == 'funB')
       choosenFUN = algorithmB
    #...and so on for the other defaults
  }

}

但是添加额外的arg customFUN似乎很奇怪,也许有一种聪明的方法可以做到这一点。 谢谢!

1 个答案:

答案 0 :(得分:0)

我想我知道了,感谢评论:

myfun = function(x = c('funA', 'funB', 'funC'))
{
  if (is.function(x))
    func = x
  else                  
    func.string = switch(match.arg(x), funA = 'UseA', funB = 'UseB', funC = 'Usec')

  if (func.string == 'UseA') 
    func = algorithmA
  else if (func.string == 'UseB')
    func = algorithmB
  # and so on

  func
}