В R как определить метод с одинаковым именем в разных классах S4 для правильной диспетчеризации метода - PullRequest
0 голосов
/ 19 марта 2020

Я определил метод getValues ​​для нового класса S4 в R. Мой класс и метод:

myClass<-setClass("MyClass", 
                  slots=list(a="numeric",b="list"))

setMethod("getValues", signature ( "MyClass", "missing", "missing"),
          getValues<-function(x)
          {
            print("MyClass-getValues called")
          })

В растровом пакете уже есть метод getValues, но с разными подписями (можно увидеть с showMethods("getValues")). Так что я думал, что способ диспетчеризации выберет правильный метод в зависимости от подписи. Но когда я запустил:

a<-raster()
getValues(a)  #problem: this calls "getValues" of the class 'MyClass' and prints "MyClass-getValues called"

Я ожидал, что будет вызван метод getValues ​​для объектов RasterLayer, но это вызовет getValues ​​класса MyClass!

Где ошибка?

1 Ответ

1 голос
/ 23 марта 2020

Ошибка в закомментированной строке ниже:

myClass<-setClass("MyClass", 
                  slots=list(a="numeric",b="list"))

setMethod("getValues", signature ( "MyClass", "missing", "missing"),
          ##getValues<-function(x)##
          {
            print("MyClass-getValues called")
          })

Эта строка перезаписывает основное определение getValues, а также устанавливает метод. Вызовите эту функцию как угодно, кроме getValues, и она должна работать.

...