Fer*_*ndo 5 arguments r function
我在R take中有一个函数可以采取一些默认值或自定义用户函数:
myfun = function(x = c('funA', 'funB', 'funC'), customFUN = NULL)
{
}
Run Code Online (Sandbox Code Playgroud)
如果用户为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
}
}
Run Code Online (Sandbox Code Playgroud)
但是添加额外的arg customFUN似乎很奇怪,也许有一个聪明的方法来做到这一点.谢谢!
我想我明白了,感谢评论:
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
}
Run Code Online (Sandbox Code Playgroud)