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

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


Sorry - it is working as suggested by Joshua.

Thanks a lot and sorry for the horrible confusion and examples,

Rainer


On 21/08/12 18:12, Rainer M Krug wrote:
> 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.
>>
>>
>>
>
>




More information about the R-help mailing list