[R] Follow Up To: Splitting the left and right hand terms of a formula

Daniel Gerlanc dgerlanc at gmail.com
Tue Jul 25 21:48:00 CEST 2006

Hi All,

I sent the following message to R-help on July 14th, 2006:

Let's say I have the following formula:

a.formula <- x ~ y + z

I want to extract the left and right-hand sides of the function so
that I have two character vectors like the ones you would create using
the following assignments:

left.hand.side <- "x"
right.hand.side <- c("y", "z")

One way to do this follows:

left.hand.side <- unlist(dimnames(attr(terms(a.formula), "factors"))[1])
right.hand.side <- unlist(dimnames(attr(terms(a.formula), "factors"))[-1])

Is there a better or cleaner way to do this?

I got one reply to try this (thanks Gabor!):

> all.vars(update(a.formula, .~0))
[1] "x"

> all.vars(update(a.formula, 0~.))
[1] "y" "z"

This works, but seems a bit of a hack.

There are two methods, "getCovariateFormula", and "getCovariate,"
which return, respectively, objects of class "formula" for the left
and right hand sides of the formula.  To get the right hand side or
left hand side I wrap one of these method calls in a call to
"all.vars".  Is there a better way to get the left or right hand side
of the formula, or is this it?


Dan Gerlanc
Williams College

More information about the R-help mailing list