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
Hi Colm,
the replaced code below works (its probably not the most elegant way,
but rather the result of hours trial and error with eval, paste, bquote
and Co).
But if you want to keep all of your model results you should read the
help for 'assign' and insert something like
assign(paste("lme.",meanCol,sep=""),#your model here)
hth.
Am 05.08.2010 23:17, schrieb Connolly, Colm:
> 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)
> );
>
> [...]
>
for (meanCol in paste("Mean_", 1:3, sep="")) {
frm<-as.formula(bquote(.(as.name(meanCol))~Group + c1 + c1 + c3)
lme1<-lme(eval(frm, data=df, random = ~ 1 | Subject)
}
> }
> 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
>
> ______________________________________________
> 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.
--
Eik Vettorazzi
Institut f?r Medizinische Biometrie und Epidemiologie
Universit?tsklinikum Hamburg-Eppendorf
Martinistr. 52
20246 Hamburg
T ++49/40/7410-58243
F ++49/40/7410-57790
> fortune(106)If the answer is parse() you should usually rethink the question. -- Thomas Lumley R-help (February 2005) Here is one approach that seems to be working: for (meanCol in paste("Mean_", 1:3, sep="")) { cat('\n######',meanCol,'\n\n') f <- formula( paste( meanCol, '~ Group + c1 + c2 + c3' ) ) means.lmeWithCovariate <- lme(f, data=df, random = ~ 1 | Subject) print(summary(means.lmeWithCovariate)) print(anova(means.lmeWithCovariate)) } -- Gregory (Greg) L. Snow Ph.D. Statistical Data Center Intermountain Healthcare greg.snow at imail.org 801.408.8111> -----Original Message----- > From: r-help-bounces at r-project.org [mailto:r-help-bounces at r- > project.org] On Behalf Of Connolly, Colm > Sent: Thursday, August 05, 2010 3:18 PM > To: r-help at r-project.org > Subject: [R] eval-parse and lme in a loop > > 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 > > ______________________________________________ > 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.
Connolly, Colm wrote:> > Hi everybody, > > I'm having trouble getting an eval-parse combination to work with lme in a > for loop. > >I have not checked in detail, but it looks like another case for what we call "Ripley's game": http://finzi.psych.upenn.edu/R/Rhelp02a/archive/16599.html Dieter -- View this message in context: http://r.789695.n4.nabble.com/eval-parse-and-lme-in-a-loop-tp2315622p2317292.html Sent from the R help mailing list archive at Nabble.com.