2014-01-24 9 views
9

Ich schreibe meine erste S3-Klasse und zugehörige Methoden und würde gerne wissen, wie ich meine Eingabedatenmenge unterteilen soll, um nur die in der Formel angegebenen Variablen zu behalten?Erhalten Sie die rechten Variablen einer R-Formel

data(iris) 
f <- Species~Petal.Length + Petal.Width 

Mit model.frame(f,iris) erhalte ich eine Teilmenge mit allen Variablen in der Formel. Wie behält man automatisch nur die rechten Variablen (im Beispiel Petal.Length und Petal.Width)?

+0

'Modell.Frame (f, Iris) [, -1]'? – lukeA

+1

Sie brauchen nicht 'as.formula' hier. 'Art ~ Petal.Length + Petal.Width' ist bereits eine Formel. –

Antwort

17

Sie möchten labels und terms; siehe ?labels, ?terms und ?terms.object.

labels(terms(f)) 
# [1] "Petal.Length" "Petal.Width" 

Insbesondere gibt die labels.terms"term.labels" Attribut eines terms Objekt, das die variable LHS ausschließt.

8

Eine Möglichkeit besteht darin, die LHS mithilfe der Teilmenge aus der Formel zu entfernen. Dann können Sie model.frame auf verwenden:

f[-2] 
~Petal.Length + Petal.Width 

model.frame(f[-2],iris) 
    Petal.Length Petal.Width 
1   1.4   0.2 
2   1.4   0.2 
3   1.3   0.2 
4   1.5   0.2 
5   1.4   0.2 
6   1.7   0.4 
... 
+1

Ich mag diese Antwort, weil sie den abhängigen Teil entfernt, unabhängig von der Anzahl der darin enthaltenen Begriffe. 'Formel (a + b ~ c + d) [- 2]' –

12

Wenn Sie eine Funktion in der Formel haben, zum Beispiel log, und wollen den Datenrahmen auf die Variablen anhand der Teilmenge, können Sie get_all_vars verwenden. Dadurch wird die Funktion und extrahieren Sie die nicht-transformierten Variablen ignorieren:

f2 <- Species ~ log(Petal.Length) + Petal.Width 

get_all_vars(f2[-2], iris) 

    Petal.Length Petal.Width 
1   1.4   0.2 
2   1.4   0.2 
3   1.3   0.2 
4   1.5   0.2 
... 

Wenn Sie nur die Variablennamen wollen, all.vars ist eine sehr hilfreiche Funktion:

all.vars(f2[-2]) 

[1] "Petal.Length" "Petal.Width" 

Die [-2] verwendet wird, um die linke Seite auszuschließen .

Verwandte Themen