2016-07-22 21 views
0

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')" 

Antwort

1

Sie setzen colnames<-.default auf eine Zeichenkette (das heißt keine Funktion). Das wird nicht funktionieren.

Verwenden Sie Backticks, um Objekte mit nicht syntaktischen Namen zu referenzieren.

`colnames<-.default` <- base::`colnames<-` 
Verwandte Themen