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

Milan Bouchet-Valat nalimilan at club.fr
Wed Aug 29 15:50:49 CEST 2012


Le mercredi 29 août 2012 à 14:26 +0200, Milan Bouchet-Valat a écrit :
> Le mercredi 29 août 2012 à 04:01 -0700, Joshua Wiley a écrit :
> > On Wed, Aug 29, 2012 at 3:56 AM, Milan Bouchet-Valat <nalimilan at club.fr> wrote:
> > > Le mardi 21 août 2012 à 07:51 -0700, Joshua Wiley a écrit :
> > >> Hi Rainer,
> > >>
> > >> You could try:
> > >>
> > >> subs <- expression(dead==FALSE & recTreat==FALSE)
> > >>
> > >> lme(formula, subset = eval(subs))
> > >>
> > >> Not tested, but something along those lines should work.
> > > Out of curiosity, why isn't "subset" (and "weights", which is very
> > > similar in that regard) evaluated in the "data" environment, just like
> > > the formula? Is this for historical reasons, or are there drawbacks to
> > > such a feature?
> > 
> > I am not sure about weights offhand, but subset is evaluated in the
> > data environment----that is why that solution works.  The original
> > question was how to setup the expression as an object that was passed
> > to subset.  The trick is to avoid having the logical expression
> > evaluated when the object is created, which I avoided by using
> > expression, and then in lme() forcing the evaluation of the object.
> OK, my phrasing was not really correct. What I meant (and what triggered
> the OP question) was : why doesn't the "subset" argument behave the same
> in lm() and in subset.data.frame()? Is there any advantage to evaluating
> the argument at the object creation?
Nevermind, forget this silly question. This works exactly as I describe
it, it's just that I did not get the OP's problem right, and for an
unexplained reason in my testing this did not work. But now I realize,
as you said, the problem is just that the OP wanted to store the subset
in an object first.

Sorry for the noise - at least I learned I can specify "weights" the
easy way... ;-)


> AFAICS, subset.data.frame() merely uses this trick:
> e <- substitute(subset)
> r <- eval(e, x, parent.frame())
> 
> 
> I'm probably missing something... ;-)
> 
> > > It seems very common to pass a data frame via the "data" argument, and
> > > use variables from it for subsetting and/or weighting.
> > >
> > >
> > > Regards
> > >
> > >
> > >> Josh
> > >>
> > >> 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.
> > >>
> > >>
> > >>
> > >
> > 
> > 
> >
> 
> ______________________________________________
> 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