想象一下,我们想使用以下第一个参数的类来调度以下S3泛型:
genfun <- function(x, ...) UseMethod("genfun", x)
现在让我们考虑一种用于此泛型的numeric
方法:
genfun.numeric <- function(x, y) {
x[y]
}
以下调用效果很好:
genfun(1:5, 3)
值得注意的是,该方法的参数名称似乎不需要与泛型名称匹配。确实,如果我们这样定义numeric
方法:
genfun.numeric <- function(a, b) {
a[b]
}
它也可以工作:
genfun(1:5, 3)
但是,以下调用失败:
genfun(a = 1:5, b = 3)
而如果返回到与泛型的参数名称匹配的方法的第一个定义:
genfun.numeric <- function(x, y) {
x[y]
}
使用命名参数进行调用就可以了:
genfun(x = 1:5, y = 3)
或:
genfun(y = 3, x = 1:5)
有没有一种方法可以使基于实参a
和b
的方法定义在使用命名实参调用时也可以工作?
答案 0 :(得分:0)
是的,有。修饰除点参数外的通用不带参数。
genfun <- function(...) UseMethod("genfun")
现在这两种方法都可以使用或不使用命名参数。
genfun.numeric <- function(x, y) {
x[y]
}
genfun(1:5, 3)
#[1] 3
还有另一个。
genfun.numeric <- function(a, b) {
a[b]
}
genfun(1:5, 3)
#[1] 3
genfun(a = 1:5, b = 3)
#[1] 3