(a) Your code is unnecessarily convoluted.
(b) The example of things *not* working is not reproducible. (Read
the posting guide!!!)
(c) Nonetheless the phenomenon you describe is weird/interesting.
On my system, the following runs without error:
fit.list <- NULL
a <- factor(rep(1:10,each=20))
set.seed(42)
for(i in 1:10) {
x1<-runif(200)
x2<-rnorm(200)
y <- x1+x2
testdf<-data.frame(y=y, x1=x1)
fit <- lm(y~x1+a,data=testdf)
fit.list[[i]] <- fit
}
However if the call to lm() is replace by a call to lmer()
library(lme4)
fit.list <- NULL
a <- factor(rep(1:10,each=20))
set.seed(42)
for(i in 1:10) {
x1<-runif(200)
x2<-rnorm(200)
y <- x1+x2
testdf<-data.frame(y=y, x1=x1)
fit <- lmer(y~x1 + (1|a),data=testdf)
fit.list[[i]] <- fit
}
I get the same error that you reported, namely
Error in fit.list[[i]] <- fit :
invalid type/length (S4/0) in vector allocation
Finally if fit.list is initialized to an empty list (which is the way
it *should*
be initialized anyway) rather than to NULL, then things appear to
work smoothly even
with a call to lmer():
library(lme4)
fit.list <- list()
a <- factor(rep(1:10,each=20))
set.seed(42)
for(i in 1:10) {
x1<-runif(200)
x2<-rnorm(200)
y <- x1+x2
testdf<-data.frame(y=y, x1=x1)
fit <- lmer(y~x1 + (1|a),data=testdf)
fit.list[[i]] <- fit
}
So a ``fix'' for the problem would seem to be to start with fit.list
being an empty list,
rather than NULL.
But why the problem shows up only with calls to lmer() is completely
mysterious to me.
Perhaps others will be able to shed light.
HTH
cheers,
Rolf Turner
On 23/06/2009, at 6:34 AM, Sean Zhang wrote:
Dear R-helpers:
May I ask a question related to storing a number of lmer model fit
into a
list.
Basically, I have a for-loop (see towards the bottom of this email)
in the loop, I am very sure that the i-th model fit (i.e.,fit_i) is
successfully generated and the character string (i.e., tmp_i) is
created
correctly.
The problem stems from the following line in the for-loop
#trouble making line below
fit.list[[tmp_i]] <- fit_i
I tried the following example which stores glm() model fit without a
problem.
#the following code can store glm() model fit into a list
---------------------------------------------------
x1<-runif(200)
x2<-rnorm(200)
y<-x1+x2
testdf<-data.frame(y=y, x1=x1, x2=x2)
indepvec<-c("x1","x2")
fit.list<-NULL
fit_1<-glm(y~x1,data=testdf)
fit_2<-glm(y~x2,data=testdf)
fit.list[[paste('fit_',indepvec[1],sep='')]]<-fit_1
fit.list[[paste('fit_',indepvec[12],sep='')]]<-fit_2
----------------------------------------------------
so why cannot I store lmer() model fit in a list?
Would someone kindly explain to me what the R error message(last
line of
this email) really means?
Your kind help will be highly appreciated!
-Sean
#the following for-loop intends to store lmer() random poisson
model output
into list (fit.list), it does not work
----------------------------------------------------------------------
-----
fit.list<-NULL
for (i in seq_along(depvar_vec))
{
#I found that s_sex, ses1 and race are not useful
fit_i <- lmer(as.formula(gen.ranpoisson.fml.jh(depvar_vec[i],
offsetvar ,factorindepvars, nonfactorindepvars ,ranintvar )),
family=quasipoisson(link="log"),verbose=F, data=indf)
tmp_i<-paste('ranpoi_', depvar_vec[i], sep='')
fit.list[[tmp_i]] <- fit_i
#assign also does not work
#assign(fit.list$parse(text = tmp_i), fit_i)
}
---------------------------------------------------------------
#R gives the following error message.
Error in fit.list[[tmp_i]] <- fit_i : invalid type/length (S4/0) in
vector
allocation
######################################################################
Attention:\ This e-mail message is privileged and confid...{{dropped:9}}
______________________________________________
R-help@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.