From: Vincent Goulet <vincent.goulet_at_act.ulaval.ca>

Date: Wed 26 Jul 2006 - 06:26:37 EST

Date: Wed 26 Jul 2006 - 06:26:37 EST

Le Mardi 25 Juillet 2006 15:48, Daniel Gerlanc a écrit :

> 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?
*

The following should help you:

> f <- x ~ y + z

*> class(f)
*

[1] "formula"

*> str(f)
*

Class 'formula' length 3 x ~ y + z

..- attr(*, ".Environment")=length 56 <environment>

*> f[[1]]
*

`~`

*> f[[2]]
*

x

*> f[[3]]
*

y + z

*> all.vars(f[[2]])
*

[1] "x"

*> all.vars(f[[3]])
*

[1] "y" "z"

If needed, the vertical bar | is also recognized as a separation symbol:

> f <- ~ x | y + z

*> f[[2]]
*

x | y + z

> f[[2]][[2]]

x

> f[[2]][[3]]

y + z

Bye! Vincent

-- Vincent Goulet, Associate Professor École d'actuariat Université Laval, Québec Vincent.Goulet_at_act.ulaval.ca http://vgoulet.act.ulaval.ca ______________________________________________ R-help@stat.math.ethz.ch mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.Received on Wed Jul 26 06:31:27 2006

Archive maintained by Robert King, hosted by
the discipline of
statistics at the
University of Newcastle,
Australia.

Archive generated by hypermail 2.1.8, at Wed 26 Jul 2006 - 08:23:59 EST.

*
Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help.
Please read the posting
guide before posting to the list.
*