[R] define subset argument for function lm as variable?

Eik Vettorazzi E.Vettorazzi at uke.de
Tue Aug 21 17:35:10 CEST 2012


Hi Rainer,
I got an error while replicating your data.frame construction.

But this worked for me

ctl = c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14)
trt = c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69)
dat <- data.frame( group = gl(2,10,20, labels=c("Ctl","Trt")),
         weight = c(ctl, trt)
         )
lm(weight ~ group, data=dat, subset=trt>0)

Cheers

Am 21.08.2012 17:11, schrieb Rainer M Krug:
> On 21/08/12 16:57, Bert Gunter wrote:
>> ?? I do not groc what you mean. ... subset == subs would work fine in
>> your lm call. So unless someone else does get it, you may need to
>> elaborate.
> 
> OK - here is an example:
> 
> dat <- data.frame(
>          ctl = c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14),
>          trt = c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69),
>          group = gl(2,10,20, labels=c("Ctl","Trt")),
>          weight = c(ctl, trt)
>          )
> lm(weight ~ group, data=dat, subset=trt>0)
> 
> subst <- trt>0 ### here I get the obvious error: Error: object 'trt' not
> found
> 
> # I want to use:
> 
> lm(weight ~ group, data=dat, subset=subst)
> 
> 
>>
>> In general, ?substitute, ?bquote, and ?quote are useful to avoid
>> immediate evaluation of calls, but I don't know if that's relevant to
>> what you want here.
> 
> Looks promising from the help, but I don't get it to work.
> 
> Rainer
> 
>>
>> -- Bert
>>
>> On Tue, Aug 21, 2012 at 7:44 AM, Rainer M Krug <r.m.krug at gmail.com>
>> wrote:
>>> Hi
>>>
>>> I want to do a series of linear models, and would like to define the
>>> input
>>> arguments for lm() as variables. I managed easily to define the formula
>>> arguments in a variable, but I also would like to have the "subset" in a
>>> variable. My reasoning is, that I have the subset in the results object.
>>>
>>> So I wiould like to add a line like:
>>>
>>> subs <- dead==FALSE & recTreat==FALSE
>>>
>>> which obviously does not work as the expression is evaluated
>>> immediately. Is
>>> is it possible to do what I want to do here, or do I have to go back
>>> to use
>>>
>>> dat <- subset(dat, dead==FALSE & recTreat==FALSE)
>>>
>>> ?
>>>
>>>
>>>
>>> dat <- loadSPECIES(SPECIES)
>>> feff <- height~pHarv*year               # fixed effect in the model
>>> reff <- ~year|plant                     # random effect in the model,
>>> where
>>> year is the
>>> dat.lme <- lme(
>>>               fixed = feff,                           # fixed effect
>>> in the
>>> model
>>>               data  = dat,
>>>               random = reff,                          # random effect
>>> in the
>>> model
>>>               correlation = corAR1(form=~year|plant), #
>>>               subset = dead==FALSE & recTreat==FALSE, #
>>>               na.action = na.omit
>>>               )
>>> dat.lm <- lm(
>>>              formula =  feff,              # fixed effect in the model
>>>              data = dat,
>>>              subset = dead==FALSE & recTreat==FALSE,
>>>              na.action = na.omit
>>>              )
>>>
>>> Thanks,
>>>
>>> Rainer
>>>
>>> -- 
>>> Rainer M. Krug, PhD (Conservation Ecology, SUN), MSc (Conservation
>>> Biology,
>>> UCT), Dipl. Phys. (Germany)
>>>
>>> Centre of Excellence for Invasion Biology
>>> Stellenbosch University
>>> South Africa
>>>
>>> Tel :       +33 - (0)9 53 10 27 44
>>> Cell:       +33 - (0)6 85 62 59 98
>>> Fax :       +33 - (0)9 58 10 27 44
>>>
>>> Fax (D):    +49 - (0)3 21 21 25 22 44
>>>
>>> email:      Rainer at krugs.de
>>>
>>> Skype:      RMkrug
>>>
>>> ______________________________________________
>>> 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.
>>
>>
>>
> 
> 


-- 
Eik Vettorazzi
Institut für Medizinische Biometrie und Epidemiologie
Universitätsklinikum Hamburg-Eppendorf

Martinistr. 52
20246 Hamburg

T ++49/40/7410-58243
F ++49/40/7410-57790




More information about the R-help mailing list