Ich versuche, Basismethoden (nicht S3) zu überschreiben, um Methoden für ein benutzerdefiniertes R-Objekt bereitzustellen. Ich möchte das mit S3 nicht S4 machen.Überschreiben Sie die Basiszuweisungsfunktion
Für die colnames
Accessor, kann dies, indem die Basisfunktion ist die Standardmethode erreicht wird, dann eine Methode für meine Klasse bereitstellt:
colnames <- function(x, ...) UseMethod("colnames")
colnames.default <- base::colnames
colnames.myclass <- function(x, ...) {
# some code here
}
Doch wie würde man die Setter-Methode außer Kraft setzen. Ich würde hoffen, etwas so sollte dies funktionieren?
"colnames<-" <- function(x, value) UseMethod("colnames<-")
"colnames<-.default" <- "base::colnames<-"
"colnames<-.myclass" <- function(x, value) {
print("Setting colnames for myclass")
# Some code
}
Dies scheint jedoch zum Scheitern verurteilt die Basisfunktion richtig für eine regelmäßige Matrix zu nennen:
> test <- matrix(1:10, 5)
> colnames(test) <- c("a", "b")
Error in UseMethod("colnames<-") :
no applicable method for 'colnames<-' applied to an object of class "c('matrix', 'integer', 'numeric')"