Définir une méthode show pour une classe S3
Question
Je suis assez stupéfait de découvrir que show est un générique S4, et que je ne trouve pas de moyen d'utiliser le dispatching S3 pour faire fonctionner une fonction show.Une démonstration simple:
> 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
Pas d'envoi S3 ici ...
> 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
Qu'en avez-vous pensé?
> 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
Et pour l'impression, cela fonctionne.
J'ai de très bonnes raisons de rester avec S3 (dont une grande partie est la minimisation de la surcharge, car les objets seront largement utilisés dans le bootstrap).Comment est-ce que je suis censé définir ici une méthode d’exposition et d’impression différente?
La solution
Peut-être
setOldClass("aClass")
setMethod(show, "aClass", function(object) cat("S4\n"))
print.aClass <- function(object) { cat("S3... "); show(object) }
puis
> structure(1:5, class="aClass")
S3... S4
Mais je ne comprends pas vraiment ce que vous voulez faire.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow