2017-03-07 1 views
0

J'ai une formule:Comment récupérer des colonnes de trame de données en évaluant des composants de formule?

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

Disons que la formule a 4 composants:

  • var1
  • var2
  • (is.na (var3) | var3 == « TOUT! «)
  • (var1: var2)

Je voudrais obtenir une colonne pour chaque composant de la formule.

Dans le cas de var1 et var2 il serait facile:

dataset$var1 
dataset$var2 

Je sais est possible d'utiliser eval(parse(text="(!is.na(var3) | var3 == "ANY")")) avec une combinaison de la fonction with. Mais cela ne fonctionnera pas avec certaines expressions de formule (comme (var1:var2)).

Répondre

0

Regardez ?terms. En particulier, l'attribut variables d'un objet de termes est une liste non évalué

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

qui peut être évaluée avec eval. En fonction de la syntaxe que vous souhaitez prendre en charge dans votre formule, vous devrez peut-être écrire votre propre méthode terms. La méthode terms.formula est celle utilisée par lm et autres.