[R] Extracting formula from an lm object
Murray Jorgensen
maj at stats.waikato.ac.nz
Mon Aug 25 00:06:53 CEST 2008
Thanks to Professors Ripley and Turlach for their help. Brian's solution
was simple and elegant but Berwin's was also informative.
Murray Jorgensen
Prof Brian Ripley wrote:
> On Sun, 24 Aug 2008, Berwin A Turlach wrote:
>
>> G'day Murray,
>>
>> On Sun, 24 Aug 2008 18:34:39 +1200
>> Murray Jorgensen <maj at stats.waikato.ac.nz> wrote:
>>
>>> I want to extra the part of the formula not including the response
>>> variable from an lm object. For example if the lm object ABx.lm was
>>> created by the call
>>>
>>> ABx.lm <- lm( y ~ A + B + x, ...)
>>>
>>> Then ACx.lm is saved as part of a workspace.
>>> I wish to extract "~ A + B + x". Later in my code I will fit
>>> another linear model of the form z ~ A + B + x for some other
>>> response variable z. I would be grateful for any suggestions of a
>>> nice way to do this.
>>
>> AFAIK, a formula is essentially a list of two or three components. The
>> first component is "~". The second is the LHS of the formula if there
>> are three components; otherwise the RHS of the formula. The third
>> component, if it exists, is the RHS of the formula.
>>
>> So storing "~ A + B + x" and manipulating this part for different
>> responses could turn out to be painful; you would have to insert the
>> new LHS as the second component of the list. I would suggest that it
>> is easier to store the complete formula and just manipulate the LHS;
>> see:
>
> An ulternative is to use update.formula on the formula extracted, or
> even just use update() on the lm fit. For the information in this
> posting (there could be more going on, like where to find 'z'),
>
> update(ABX.lm, z ~ .)
>
> should be all that is needed.
>
>>
>> R> library(MASS)
>> R> fm <- lm(time~dist+climb, hills)
>> R> formula(fm)
>> time ~ dist + climb
>> R> formula(fm)[[1]]
>> `~`
>> R> formula(fm)[[2]]
>> time
>> R> formula(fm)[[3]]
>> dist + climb
>> R> tt <- formula(fm)
>> R> tt[[2]] <- NULL
>> R> tt
>> ~dist + climb
>>
>> R> tt <- formula(fm)
>> R> class(tt[[2]])
>> [1] "name"
>> R> typeof(tt[[2]])
>> [1] "symbol"
>> R> tt[[2]] <- as.name("y")
>> R> tt
>> y ~ dist + climb
>>
>> R> tt <- formula(fm)
>> R> tt[[2]] <- as.symbol("z")
>> R> tt
>> z ~ dist + climb
>>
>> HTH.
>>
>> Cheers,
>>
>> Berwin
>>
>> =========================== Full address =============================
>> Berwin A Turlach Tel.: +65 6515 4416 (secr)
>> Dept of Statistics and Applied Probability +65 6515 6650 (self)
>> Faculty of Science FAX : +65 6872 3919
>> National University of Singapore
>> 6 Science Drive 2, Blk S16, Level 7 e-mail: statba at nus.edu.sg
>> Singapore 117546 http://www.stat.nus.edu.sg/~statba
>>
>> ______________________________________________
>> 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.
>>
>
--
Dr Murray Jorgensen http://www.stats.waikato.ac.nz/Staff/maj.html
Department of Statistics, University of Waikato, Hamilton, New Zealand
Email: maj at waikato.ac.nz Fax 7 838 4155
Phone +64 7 838 4773 wk Home +64 7 825 0441 Mobile 021 1395 862
More information about the R-help
mailing list