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

Rainer M Krug r.m.krug at gmail.com
Tue Aug 21 18:12:03 CEST 2012


On 21/08/12 17:54, Joshua Wiley wrote:
> What is wrong with what I suggested initially?
>
> subst <- expression(trt > 0)
> lm(weight ~ group, data=dat, subset=eval(subst))

That it does not work?

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)
          )
rm(ctl)
rm(trt)
subst <- expression(trt > 0)
lm(weight ~ group, data=dat, subset=eval(subst))
# output: Error in eval(expr, envir, enclos) : object 'trt' not found


and

lm(weight ~ group, data=dat, subset=subst)
# output: Error in xj[i] : invalid subscript type 'expression'
 >

also does not work.

Rainer

>
>
> ??
>
> On Tue, Aug 21, 2012 at 8:41 AM, Rainer M Krug <r.m.krug at gmail.com> wrote:
>> 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.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>
>>>
>>
>>
>> --
>> 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.
>
>
>


-- 
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




More information about the R-help mailing list