William Noble <[EMAIL PROTECTED]> writes: > Hello, > > I am trying to do an ANOVA on a microarray data set consisting of > 22690 elements. The ANOVA is fine, but when I try to put the data in > a frame in order to exporting it, I get a stack overflow. I have > found documentation on dynamic memory in R, but not on how to increase > the stack size. The code I'm using is below. If anyone has any > suggestions for a workaround here, I'd appreciate it.
You might want to consider turning it into a matrix instead (just use sapply()). However, this looks like a bug and it has even got worse in r-devel. So thanks for drawing attention to it. To paraphrase the situation, just take a long list of short vectors and turn it into a data frame: > tmp <- lapply(1:22690,function(i)rnorm(3)) > xx <- data.frame(tmp) Segmentation fault The problem comes from within the error handler itself. Program received signal SIGSEGV, Segmentation fault. Rf_errorcall (call=0x81dadb0, format=0x817c598 "protect(): stack overflow") at ../../../R/src/main/errors.c:481 481 vsignalError(call, format, ap); The traceback indicates that Rf_protect() goes into infinite recursion. (Luke?) Deep down in the stack we have #760082 0x08073e48 in Rf_substituteList (el=0x8d47a9c, rho=0x81dadb0) at ../../../R/src/main/coerce.c:1811 1811 PROTECT(h = substitute(CAR(el), rho)); (gdb) down #760081 0x080bf717 in Rf_protect (s=0x978a050) at ../../../R/src/main/memory.c:1999 1999 errorcall(R_NilValue, "protect(): stack overflow"); and below that we have #760082 0x08073e48 in Rf_substituteList (el=0x8d47a9c, rho=0x81dadb0) at ../../../R/src/main/coerce.c:1811 1811 PROTECT(h = substitute(CAR(el), rho)); (gdb) #760083 0x08073e54 in Rf_substituteList (el=0x8d47ab8, rho=0x81dadb0) at ../../../R/src/main/coerce.c:1812 1812 PROTECT(t = substituteList(CDR(el), rho)); (gdb) #760084 0x08073e54 in Rf_substituteList (el=0x8d47ad4, rho=0x81dadb0) at ../../../R/src/main/coerce.c:1812 1812 PROTECT(t = substituteList(CDR(el), rho)); (gdb) #760085 0x08073e54 in Rf_substituteList (el=0x8d47af0, rho=0x81dadb0) at ../../../R/src/main/coerce.c:1812 1812 PROTECT(t = substituteList(CDR(el), rho)); So the original problem is that substituteList() is not happy with long lists. I'm not really sure but my gut feeling is that the tail should be computed before the head (i.e. reverse lines 1811 and 1812) so that you don't end up with a pile of heads computed before the recursion ends. -- O__ ---- Peter Dalgaard Blegdamsvej 3 c/ /'_ --- Dept. of Biostatistics 2200 Cph. N (*) \(*) -- University of Copenhagen Denmark Ph: (+45) 35327918 ~~~~~~~~~~ - ([EMAIL PROTECTED]) FAX: (+45) 35327907 ______________________________________________ [EMAIL PROTECTED] mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help