Написание универсального метода S4 с двумя аргументами

Я пытаюсь определить свой собственный класс S4 с помощью универсального метода.

setClass("MultiplyObject", representation(the.factor = "numeric"))
# Create a new instance of a class with the "new" method
multobj <- new("MultiplyObject", the.factor = 3)
# Create a new generic function definition
setGeneric("ActOnNumber", function(object, n) {
    standardGeneric("ActOnNumber", n)
})
# Define the ActOnNumber method for the MultiplyObject class 
setMethod("ActOnNumber", signature(object = "MultiplyObject", n = "numeric"),
        function(object, n) {
    object@the.factor * n
})
cat(sprintf('ActOnNumber(multobj, 4) = %.2f\n', ActOnNumber(multobj, 4)))

Однако, когда я получаю файл, содержащий указанный выше код, я получаю сообщение об ошибке.

> source('tests4.R')
Error in ActOnNumber(multobj, 4) : 
  expected a generic function or a primitive for dispatch, got an object of class "numeric"

Как правильно определить ActOnNumber функционировать?

1 ответ

Решение

standardGeneric() Функция ожидает имя функции, сделанное универсальным, не более того. Так

setGeneric("ActOnNumber", function(object, n) {
    standardGeneric("ActOnNumber")
})
Другие вопросы по тегам