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

Eik Vettorazzi E.Vettorazzi at uke.de
Tue Aug 21 18:14:07 CEST 2012


Josh's solution should be fine.

just one more note,
trt>0 may not work as intended since trt is a factor in your example.
Just check
subset(dat,trt>0)
wich is just 'dat'.



Am 21.08.2012 17:41, schrieb Rainer M Krug:
> On 21/08/12 17:35, Eik Vettorazzi wrote:
>> 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)
>>           )
> 
> Sorry  - to much garbage in my workspace left.
> 
> Just add:
> 
> rm(ctl)
> rm(trt)
> 
> after the definition
> 
>> lm(weight ~ group, data=dat, subset=trt>0)
> 
> this obviously works, but I would like to have:
> 
> subst <- trt>0
> lm(weight ~ group, data=dat, subset=subst)
> 
> Sorry about this,
> 
> Rainer
> 
> 
>>
>> 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