2017-03-07 2 views
0

Ich habe eine Formel:Wie können Datenrahmenspalten durch Auswertung von Formelkomponenten abgerufen werden?

form <- outcome ~ var1 + var2 + (!is.na(var3) | var3 == "ANY") + (var1:var2) 

Lassen Sie uns sagen, dass die Formel 4 Komponenten:

  • var1
  • var2
  • (is.na (var3) | var3 == „ANY! „)
  • (var1: var2)

Ich möchte für jede Formelkomponente eine Spalte erhalten.

Im Fall von var1 und var2 es einfach wäre:

dataset$var1 
dataset$var2 

ich weiß, ist möglich eval(parse(text="(!is.na(var3) | var3 == "ANY")")) mit einer Kombination aus der with Funktion zu verwenden. Aber es wird nicht mit einigen Formelausdrücken funktionieren (wie (var1:var2)).

Antwort

0

Werfen Sie einen Blick auf ?terms. Insbesondere ist das variables Attribut eines Begriffe Objekt eine nicht ausgewertete Liste

attr(terms(form), 'variables') 
#list(outcome, var1, var2, !is.na(var3) | var3 == "ANY") 

, die mit eval ausgewertet werden können. Abhängig von der Syntax, die Sie in Ihrer Formel unterstützen möchten, müssen Sie möglicherweise Ihre eigene terms Methode schreiben. Die terms.formula Methode wird von lm und anderen verwendet.

Verwandte Themen