[R] eval-parse and lme in a loop
Connolly, Colm
cgconnolly at ucsd.edu
Thu Aug 5 23:17:58 CEST 2010
Hi everybody,
I'm having trouble getting an eval-parse combination to work with lme in a for loop.
Consider the code below. The call to lme outside the loop works. The call to aov inside the loop works, but the call to to lme inside the loop does not.
The latter fails with
Error in model.frame.default(formula = ~meanCol + Group + c1 + c3 + Subject, :
variable lengths differ (found for 'Group')
and I don't know why the eval-parse portion of the code is node being replaced as it is in the call to aov. Anybody got any idea what's wrong?
rm(list=ls())
library('nlme')
df=data.frame(
Group=rep(c("ctrl", "short", "long"), each=9, times=1),
Subject=paste("S", 1:27, sep=""),
Mean_1=c(-2.335482, 8.269832, 6.704734, -2.355664, 0.724432, 11.212987, 5.966652, 10.741065, 3.567522, 5.359832, 4.899951, 4.084452, 5.976326, 8.634508, 5.750942, 7.455622, 6.823843, 0.903801, 13.198157, 5.238985, 5.171453, 10.273715, 5.184785, 6.225874, 8.889997, 12.096968, 9.843028),
Mean_2=c(16.244444, -1.486571, 1.817303, 3.814328, -0.343775, 19.323227, -0.390764, 7.149855, 4.517766, -0.967120, 11.219844, 0.561103, 5.188478, -4.819444, 6.253271, 7.062638, 4.502291, -0.469567, 12.739646, 5.832679, 9.193511, 7.664636, 6.083930, 9.493136, 7.478424, 7.642287, 7.205822),
Mean_3=c(7.213662, 2.147219, -1.345795, -0.495567, 3.733844, 3.544084, 0.949573, 4.318238, 2.914248, 3.913391, 9.240128, 8.315122, 12.323612, 14.622557, 11.169847, 10.857631, 14.637243, 7.203096, 7.777472, -1.457673, 2.766380, 9.675148, -5.047292, 1.982447, 3.865502, 5.045913, 10.660579),
c1=rnorm(9, mean=0.1, sd=0.4),
c2=rnorm(9, mean=0.5, sd=0.7),
c3=rnorm(9, mean=0.9, sd=1)
);
## this works
means.lmeNoCovariate=lme(Mean_1 ~ Group, data=df, random = ~ 1 | Subject)
print(summary(means.lmeNoCovariate))
print(anova(means.lmeNoCovariate))
for (meanCol in paste("Mean_", 1:3, sep="")) {
## LMEs go here
cat("####################################################################################################\n")
cat("### AOV\n")
cat("####################################################################################################\n")
## this works
means.aov<-aov(eval(parse(text=meanCol)) ~ Group, data=df);
means.aov.summary=summary(means.aov)
print(means.aov.summary)
cat("####################################################################################################\n")
cat("### LME\n")
cat("####################################################################################################\n")
## this doe not work
means.lmeWithCovariate=lme(eval(parse(text=meanCol)) ~ Group + c1 + c1 + c3, data=df, random = ~ 1 | Subject)
print(summary(means.lmeWithCovariate))
print(anova(means.lmeWithCovariate))
}
Regards,
--
Colm G. Connolly, Ph. D.
Dept of Psychiatry
University of California, San Diego
9500 Gilman Dr. #0738
La Jolla, CA 92093-0738
Tel: +1-858-246-0684
More information about the R-help
mailing list