Pregunta

Estoy bastante sorprendido de descubrir que el programa es un genérico S4, y que no puedo encontrar una manera de usar el despacho de S3 para que funcione una función de espectáculo. Una simple demostración:

> 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

No S3 envía aquí ...

> 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é pensaste?

> 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

Y para imprimir funciona.

Tengo bastante buenas razones para quedarme con S3 (de las cuales una gran parte es la minimización de la sobrecarga, ya que los objetos se utilizarán ampliamente en arranque). ¿Cómo se supone que debo definir un método diferente de espectáculo e impresión aquí?

¿Fue útil?

Solución

Quizás

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

y entonces

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

Pero realmente no entiendo lo que quieres hacer.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top