Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于特定参数存在的R中的方法调度_R - Fatal编程技术网

基于特定参数存在的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)
}