Я был весьма ошеломлен, узнав, что show является общим для S4, и что я не могу найти способ использовать диспетчеризацию S3, чтобы заставить работать функцию show. Простая демонстрация:
> x <- 1:5
> xx <- structure(x,class="aClass")
> show.aClass <- function(object){
+ cat("S3 dispatching.\n")
+ print(object)
+ }
> xx
[1] 1 2 3 4 5
Здесь нет отправки S3 ...
> setMethod("show","aClass",function(object){
+ cat("S4 dispatching.\n")
+ print(object)
+ })
in method for ‘show’ with signature ‘"aClass"’: no definition for class “aClass”
[1] "show"
> xx
[1] 1 2 3 4 5
Что вы думаете?
> print.aClass <- function(object){
+ cat("the print way...\n")
+ print(as.vector(object)) #drop class to avoid infinite loop!
+ }
> xx
the print way...
[1] 1 2 3 4 5
А для печати это работает.
У меня есть довольно веские причины остаться с S3 (из которых большая часть - минимизация накладных расходов, поскольку объекты будут широко использоваться при начальной загрузке). Как мне определить здесь другой метод отображения и печати?