为S3类定义show方法

时间:2011-12-07 11:03:07

标签: r show s4

我很惊讶地发现该节目是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(其中很大一部分是开销的最小化,因为对象将在bootstrapping中广泛使用)。我该怎么定义一个不同的展示和印刷方法?

1 个答案:

答案 0 :(得分:4)

也许

setOldClass("aClass")
setMethod(show, "aClass", function(object) cat("S4\n"))
print.aClass <- function(object) { cat("S3... "); show(object) }

然后

> structure(1:5, class="aClass")
S3... S4

但我真的不明白你想做什么。