define subset argument for function lm as variable?
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? 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.