我很惊讶地发现 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(其中很大一部分是开销最小化,因为这些对象将广泛用于引导程序)。我应该如何在这里定义不同的显示和打印方法?