# 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