Dieter Menne
2006-Jan-12 16:54 UTC
[R] "infinite recursion" in do.call when lme4 loaded only
A larg program which worked with lme4/R about a year ago failed when I re-run it today. I reproduced the problem with the program below. -- When lme4 is not loaded, the program runs ok and fast enough -- When lme4 is loaded (but never used), the do.call fails with infinite recursion after 60 seconds. Memory used increases beyond bonds in task manager. -- I tested a few S3 based packages (MASS, nlme) and did not get similar problems Current workaround: do lme4-processing in a separate program. ------ #library(lme4) # uncomment this to see the problem np <- 12 nq <- 20 nph <- 3 nrep <- 30 grd <- expand.grid(Pat=as.factor(1:np), Q=as.factor(1:nq), Phase=as.factor(1:nph)) df <- with (grd, data.frame(Pat=Pat,Q=Q,Phase=Phase,Resp = rnorm(np*nq*nph*nrep))) score <- function(x) { data.frame(Pat=x$Pat[1],Phase=x$Phase[1],Q=x$Q[1],score = mean(x$Resp)) } # about 20 sec caScore <- by(df,list(Pat=df$Pat,Phase=df$Phase,Q=df$Q),FUN = score ) ca1 = do.call("rbind",caScore) # Without lme4: 3 seconds # With lme4: After 60 sec: #Error: evaluation nested too deeply: infinite recursion / #options(expressions=)? ----------------------- platform i386-pc-mingw32 arch i386 os mingw32 system i386, mingw32 status major 2 minor 2.1 year 2005 month 12 day 20 svn rev 36812 language R
Peter Dalgaard
2006-Jan-12 17:26 UTC
[R] "infinite recursion" in do.call when lme4 loaded only
"Dieter Menne" <dieter.menne at menne-biomed.de> writes:> A larg program which worked with lme4/R about a year ago failed when I > re-run it today. I reproduced the problem with the program below. > > -- When lme4 is not loaded, the program runs ok and fast enough > -- When lme4 is loaded (but never used), the do.call fails > with infinite recursion after 60 seconds. Memory used increases > beyond bonds in task manager. > -- I tested a few S3 based packages (MASS, nlme) and did not get > similar problems > > Current workaround: do lme4-processing in a separate program.Looks like it conks out when the number of frames to rbind is bigger than about 110. Current releases have> options("expressions")$expressions [1] 1000 It was 5000 for a while, but we found that it could overflow the C stack on some systems. Since your example has 720 lines, I can't quite rule out that that the problem was really there all the time. However, it surely has to do with methods dispatch:> system.time(do.call("rbind.data.frame",caScore))[1] 0.99 0.00 0.99 0.00 0.00 which provides you with another workaround.> > ------ > #library(lme4) # uncomment this to see the problem > np <- 12 > nq <- 20 > nph <- 3 > nrep <- 30 > grd <- expand.grid(Pat=as.factor(1:np), > Q=as.factor(1:nq), > Phase=as.factor(1:nph)) > df <- with (grd, > data.frame(Pat=Pat,Q=Q,Phase=Phase,Resp = rnorm(np*nq*nph*nrep))) > > score <- function(x) { > data.frame(Pat=x$Pat[1],Phase=x$Phase[1],Q=x$Q[1],score = mean(x$Resp)) > } > > # about 20 sec > caScore <- by(df,list(Pat=df$Pat,Phase=df$Phase,Q=df$Q),FUN = score ) > > ca1 = do.call("rbind",caScore) > # Without lme4: 3 seconds > # With lme4: After 60 sec: > #Error: evaluation nested too deeply: infinite recursion / > #options(expressions=)? > > > ----------------------- > > platform i386-pc-mingw32 > arch i386 > os mingw32 > system i386, mingw32 > status > major 2 > minor 2.1 > year 2005 > month 12 > day 20 > svn rev 36812 > language R > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html >-- O__ ---- Peter Dalgaard ??ster Farimagsgade 5, Entr.B c/ /'_ --- Dept. of Biostatistics PO Box 2099, 1014 Cph. K (*) \(*) -- University of Copenhagen Denmark Ph: (+45) 35327918 ~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk) FAX: (+45) 35327907