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?

Était-ce utile?

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
scroll top