Представьте, что у нас есть следующий универсальный 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
, также работало при вызове с именованным аргументом?