基于特定参数存在的R中的方法调度
我有两个函数,基于特定参数存在的R中的方法调度,r,R,我有两个函数,f1(…)和f2(…)。我想将它们分组在一个函数f(…)下,并有条件地将f(…)的参数传递给f1或f2。如果f(…)被传递了一个名为special.param的参数,那么我将调用f2(…)。否则我将调用f1(…)。我不相信UseMethod可以处理这个问题,因为它将检查第一个参数的类,而不是某个参数的存在。正确的方法是什么?如果这些是您的函数,p是您的特殊参数,是否有办法检查中参数的名称 f1 <- function(..., p) "f1" f2 <- functio
f1(…)
和f2(…)
。我想将它们分组在一个函数f(…)
下,并有条件地将f(…)
的参数传递给f1
或f2
。如果f(…)
被传递了一个名为special.param
的参数,那么我将调用f2(…)
。否则我将调用f1(…)
。我不相信UseMethod
可以处理这个问题,因为它将检查第一个参数的类,而不是某个参数的存在。正确的方法是什么?如果这些是您的函数,p
是您的特殊参数,是否有办法检查中参数的名称
f1 <- function(..., p) "f1"
f2 <- function(..., p) "f2"
setGeneric("f", function(..., p) standardGeneric("f"),
signature="p", useAsDefault=f1)
并实现在缺少参数时调用的方法
setMethod("f", "missing", f2)
具有相同结果的更对称的实现将是
setGeneric("f", function(..., p) standardGeneric("f"), signature="p")
setMethod("f", "ANY", f1)
setMethod("f", "missing", f2)
与
一个更简单的base R替代方案(由注释和删除的答案暗示)是
f如果missing(p)
或者f1
则创建一个调用f2
的函数f
,与此相比有什么优势?“你的方式在我看来更像R,但我想知道是否有实际的区别。”安德鲁我在结尾添加了一段,强调了一些优点和缺点。
> f(p=1)
[1] "f1"
> f()
[1] "f2"
f <- function(..., p) {
if (missing(p))
f2(...)
else
f1(..., p=p)
}