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