[R] Multiple left hand side variables in a formula

Frank Harrell f.harrell at vanderbilt.edu
Sat Mar 2 14:14:19 CET 2013


Achim this is perfect.  I had not seen Formula before.  Thanks for writing
it!
Frank

Achim Zeileis-4 wrote
> 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@

>  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-tp4660060p4660080.html
Sent from the R help mailing list archive at Nabble.com.



More information about the R-help mailing list