Re: [R] Determining response variable in a formula

From: Sundar Dorai-Raj <sundar.dorai-raj_at_pdf.com>
Date: Wed 13 Jul 2005 - 00:58:35 EST

David Kane wrote:
> I have a formula from which I want to deduce the name of the response
> variable. One way of doing so is as follows:
>
>

>>my.form <- as.formula("y ~ x + z")
>>all.vars(my.form)[1]

>
> [1] "y"
>
>
> Is there a better way and/or preferrred method of determining "y" from
> my.form than this one? In messing around with terms, I came up with:
>
>
>>all.vars(terms(my.form))[attr(terms(my.form), "response")]

>
> [1] "y"
>
>
> But that seems too ugly to be best.
>
> Thanks,
>
> Dave Kane
>
>
>>R.version

>
> _
> platform i686-pc-linux-gnu
> arch i686
> os linux-gnu
> system i686, linux-gnu
> status
> major 2
> minor 1.0
> year 2005
> month 04
> day 18
> language R
>
>

David,

Using all.vars as you have might be dangerous if you ever encounter a one sided formula. For example,

all.vars(y ~ x)[1] # "y"
all.vars(~x)[1] # "x"

You might want to look at nlme::getResponseFormula or I wrote a function a while back:

parse.formula <- function(formula) {

   vars <- terms(as.formula(formula))
   y <- if(attr(vars, "response"))
     nlme::getResponseFormula(formula)
   x <- nlme::getCovariateFormula(formula)    z <- nlme::getGroupsFormula(formula)
   list(response = all.vars(y),

        covariates = all.vars(x),
        groups = all.vars(z))

}

parse.formula(y ~ x)$response # "y"
parse.formula( ~ x)$response # character(0)

HTH, --sundar



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 Received on Wed Jul 13 01:12:44 2005

This archive was generated by hypermail 2.1.8 : Fri 03 Mar 2006 - 03:33:34 EST