[R] Multiple left hand side variables in a formula

Achim Zeileis Achim.Zeileis at uibk.ac.at
Sat Mar 2 10:51:29 CET 2013


On Fri, 1 Mar 2013, Frank Harrell wrote:

> Thank you Bill.  A temporary re-arrangement of the formula will allow me to
> do the usual subset= na.action= processing afterwards.  Nice idea.  I don't
> need the dot notation very often for this application.

That's what the "Formula" package provides. It allows for multiple parts 
and multiple responses on both side of the ~. Internally, the formula is 
decomposed and separate terms are produced. And using an auxiliary formula 
it is assured that a single model frame (with unified NA processing). And 
all of this is hidden from the user by providing methods that are as 
standard as possible, see:

vignette("Formula", package = "Formula")

hth,
Z

> Frank
>
> William Dunlap wrote
>> I don't know how much of the information that model.frame supplies you
>> need,
>> but you could make a data.frame containing all the variables on both sides
>> of them
>> formula by changing lhs~rhs into ~lhs+rsh before calling model.frame.
>> E.g.,
>>
>> f <- function (formula)  {
>>     if (length(formula) == 3) { # has left hand side
>>         envir <- environment(formula)
>>         formula <- formula(call("~", call("+", formula[[2]],
>> formula[[3]])))
>>         environment(formula) <- envir
>>     }
>>     formula
>> }
>>
>> This doesn't quite take care of the wild-card dot in the formula: straight
>> variables are omitted from dot's expansion but functions of variables are
>> not:
>>> colnames(model.frame(f(log(mpg)+hp ~ .), data=mtcars))
>>  [1] "log(mpg)" "hp"       "mpg"      "cyl"
>>  [5] "disp"     "drat"     "wt"       "qsec"
>>  [9] "vs"       "am"       "gear"     "carb"
>>
>> Bill Dunlap
>> Spotfire, TIBCO Software
>> wdunlap tibco.com
>>
>>
>>> -----Original Message-----
>>> From:
>
>> r-help-bounces@
>
>>  [mailto:
>
>> r-help-bounces@
>
>> ] On Behalf
>>> Of Frank Harrell
>>> Sent: Friday, March 01, 2013 4:17 PM
>>> To:
>
>> r-help@
>
>>> Subject: [R] Multiple left hand side variables in a formula
>>>
>>> The lattice package uses special logic to allow for multiple
>>> left-hand-side
>>> variables in a formula, e.g. y1 + y2 ~ x.  Is there an elegant way to do
>>> this outside of lattice?  I'm trying to implement a data summarization
>>> function that logically takes multiple dependent variables.  The usual
>>> invocation of model.frame( ) causes R to try to do arithmetic addition to
>>> create a single dependent variable.
>>>
>>> Thanks
>>> Frank
>>>
>>>
>>>
>>> -----
>>> Frank Harrell
>>> Department of Biostatistics, Vanderbilt University
>>> --
>>> View this message in context:
>>> http://r.789695.n4.nabble.com/Multiple-left-hand-side-
>>> variables-in-a-formula-tp4660060.html
>>> Sent from the R help mailing list archive at Nabble.com.
>>>
>>> ______________________________________________
>>>
>
>> R-help@
>
>>  mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>> PLEASE do read the posting guide
>>> http://www.R-project.org/posting-guide.html
>>> and provide commented, minimal, self-contained, reproducible code.
>>
>> ______________________________________________
>
>> R-help@
>
>>  mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide
>> http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>
>
>
>
>
> -----
> Frank Harrell
> Department of Biostatistics, Vanderbilt University
> --
> View this message in context: http://r.789695.n4.nabble.com/Multiple-left-hand-side-variables-in-a-formula-tp4660060p4660065.html
> Sent from the R help mailing list archive at Nabble.com.
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>



More information about the R-help mailing list