[R] Determining response variable in a formula
Sundar Dorai-Raj
sundar.dorai-raj at pdf.com
Tue Jul 12 16:58:35 CEST 2005
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
More information about the R-help
mailing list