[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