2016-09-15 3 views
3

Ich habe Probleme beim Definieren einer Klasse, die alle Methoden von data.frame erbt. Zum Beispiel, wenn ich eine Klasse Timeline zu definieren, war dies als data.frame dargestellt werden könnte:Erweitern Sie die Klasse data.frame in R, um die Methode data.frame zu erben.

data.frame(task = c("Read Permutation City", "Learn S4 oop"), 
      from = c(Sys.Date(), Sys.Date()), 
      to = c(Sys.Date() + 5, Sys.Date() + 1)) 

Stattdessen würde Ich mag eine Klasse „Timeline“ definieren, die alle ein data.frames Methoden behalten würde, aber überschreiben und fügen Sie mehrere Methoden hinzu (zB Plot, Zusammenfassung und Fenster). In anderen Sprachen ist das ziemlich einfach.

Ich möchte dies mit einer S4-Klassenstruktur tun. Ich habe versucht, eine S4-Klasse mit dem Argument contains zu implementieren, aber ich muss etwas falsch machen, da die Ergebnisse nicht das sind, was Sie von einem data.frame erwarten.

timeline <- setClass(Class = "timeline", contains = "data.frame") 

timeline <- function(task, from, to) { 
    new("timeline", data.frame(task = task, from = from, to = to)) 
} 

tm <- timeline("Run", Sys.Date(), Sys.Date() + 5) 
getClass("timeline") # Class "timeline" .... Extends: Class "data.frame", directly 
inherits(tm, "data.frame") # TRUE 

nrow(tm) # 0 
ncol(tm) # 3 

tm # Prints S4 info 
print(tm) # Expected output 

Was ist der richtige Weg?

Antwort

0

Verwenden Sie setOldClass("data.frame") vor setClass().