2016-06-17 17 views
1

Ich, die eine generische FunktionTypumwandlung vor dem Versand erfolgt

genfun <- function(x, ...) 
    UseMethod("genfun") 

was sollte Schlepptau Instanzen haben: genfun.default (wenn x eine Matrix) genfun.formula (wenn x eine Formel)

Das funktioniert gut, aber jetzt möchte ich, dass vor dem Versand stattfindet, dass, wenn X eine Zeichenkette ist, gezwungen wird, eine Formel zu sein.

Leider ist die folgende nicht funktioniert

genfun <- function(x, ...) { 
    if (is.character(x)) x <- as.formula(x) 
    UseMethod("rlasso") 
} 

Gibt es eine Möglichkeit, dies zu umgehen, ohne ein weiteres Beispiel wie genfun.character zu definieren?

Vielen Dank für Ihre Hilfe im Voraus!

Best,

Martin

+0

wenn Sie nicht ein Verfahren zur 'Klasse (x)', ist die Standardmethode verwendet, so können Sie diese Zeile auf die Standard-Methode hinzufügen, kann ich – rawr

+0

Danke für die Antwort annehmen. Aber die Standardmethode verarbeitet nur Matrizen und ist die falsche. Ich muss irgendwie auf die Formel Methode kommen und möchte keine andere Methode für Charakter hinzufügen ... – Martin

Antwort

1

Ich war so etwas wie dieses Denken (obwohl der richtige Weg, eine andere Methode zu definieren wäre).

genfun <- function(x, ...) 
    UseMethod('genfun') 

genfun.default <- function(x, ...) { 
    if (is.character(x)) { 
    x <- as.formula(x) 
    return(genfun(x)) 
    } 
    dim(x) 
} 

genfun.formula <- function(x, ...) { 
    message('using formula method') 
    ## do something 
} 


genfun(mtcars) 
# [1] 32 11 

genfun(y ~ x) 
# using formula method 

genfun('y ~ x') 
# using formula method