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 にとどまるかなりの理由があります (その大部分は、オブジェクトがブートストラップで広く使用されるため、オーバーヘッドの最小化です)。ここで別の show および print メソッドを定義するにはどうすればよいですか?