Является ли «show» обычной общей функцией S4?

Я пытаюсь создать метод для своего класса, который наследуется от data.frame. Первоначально я надеялся просто унаследовать метод 'show' от data.frame, но я также могу написать свой собственный. Я определил свой класс и метод "show" следующим образом:

setClass("SCvec", representation(auth = "character",
    dev = "character",
    sensor = "character",
    channel = "character",
    starttime = "character",
    endtime = "character"),
    contains="data.frame")
setMethod("show", signature(x="SCvec"), function(x) print(x))

когда я набираю show в консоли R, он выводит:

StandardGeneric для "show", определенного из "methods" пакета

function (object) 
standardGeneric("show")
<bytecode: 0x0396bee8>
<environment: 0x0393ab60>
Methods may be defined for arguments: object
Use  showMethods("show")  for currently available ones.
(This generic function excludes non-simple inheritance; see ?setIs)

Так что, похоже, мне не нужно превращать его в дженерик, используя StandardGeneric(). но когда я запускаю свою строку setMethod("show", signature(x="SCvec"), function(x) print(x)), я получаю сообщение об ошибке

Error in match.call(definition, call, expand.dots) : 
  unused argument(s) (x = c("SCvec", ""))

Я определил этот метод так же, как и любой другой. Почему это определение метода не работает? Отличается ли show от других универсальных функций?


person Liz Sander    schedule 11.07.2012    source источник


Ответы (1)


Функция show принимает аргумент object, поэтому вам нужно будет определить свою подпись и определение функции относительно этого формального аргумента:

setMethod("show", signature(object="SCvec"), function(object) print(object))

Вы также можете увидеть другие методы, определенные для show, введя

showMethods(show)

И это показывает вам, что все остальные методы также определены в терминах класса object.

person BenBarnes    schedule 11.07.2012
comment
Спасибо! Глупая ошибка с моей стороны... все методы, которые я определял ранее, принимали "x" в качестве аргумента, и я просто скопировал и вставил свой код для "show". - person Liz Sander; 11.07.2012
comment
getGeneric("show") обеспечивает интерактивный просмотр общей подписи. - person Martin Morgan; 12.07.2012