extract variables in formula from a data frame

This should work:

> fr[gsub(" ","",rownames(attr(terms.formula(ff), "factors")))]
  log(Reaction) log(1+Days) x y
1             1           1 1 1
2             2           2 2 2
3             3           3 3 3
4             4           4 4 4

And props to Roman Luštrik for pointing me in the right direction.

Edit: Looks like you could pull it out off the "variables" attribute as well:

fr[gsub(" ","",attr(terms(ff),"variables")[-1])]

Edit 2: Found first problem case, involving I() or offset():

ff <- I(log(Reaction)) ~ I(log(1+Days)) + x + y
fr[gsub(" ","",attr(terms(ff),"variables")[-1])]

Those would be pretty easy to correct with regex, though. BUT, if you had situations like in the question where a variable is called, e.g., log(x) and is used in a formula alongside something like I(log(y)) for variable y, this will get really messy.

Tags:

R

R Formula