[Rd] unlist crashes 32-bit R on WinXP when use.names=TRUE

Dirk Eddelbuettel edd at debian.org
Sun May 6 14:17:18 CEST 2012


On 6 May 2012 at 07:53, Duncan Murdoch wrote:
| On 12-05-06 6:43 AM, Duncan Murdoch wrote:
| > On 12-05-05 10:39 PM, Joshua Ulrich wrote:
| >> Hi all,
| >>
| >> I experienced a crash in R-2.15.0 on 32-bit Windows XP (sessionInfo
| >> below) when running the piece of code below.  I cannot replicate the
| >> error on 64-bit Linux, 64-bit Windows, or 32-bit R running under
| >> 64-bit Windows.  I do not have, and could not find, a 32-bit version
| >> of Linux to test this.

On 32bit Linux with limited ram, it just swaps away ...

| >>> NOW<- Sys.time()
| >>> FUTURE<- NOW+1:1e7
| >>> crash<- as.character(FUTURE)
| >> Error in unlist(unclass(x)[1L:3L]) :
| >>     promise already under evaluation: recursive default argument
| >> reference or earlier problems?
| >>> traceback()
| >> Error: C stack usage is too close to the limit
| >>> # evaluating an expression at this point would cause R to exit ungracefully
| >>
| >> Here's an example that avoids a lot of unnecessary code:
| >>
| >> L1<- list(one=1:1e6, two=1:1e6, three=1:1e6)
| >> # no issue with smaller list elements
| >> U1<- unlist(L1, recursive=TRUE, use.names=TRUE)
| >> C1<- c(L1, recursive=TRUE, use.names=TRUE)
| >>
| >> L2<- list(one=1:1e7, two=1:1e7, three=1:1e7)
| >> # crashes after ~2min with error above
| >> U2<- unlist(L2, recursive=TRUE, use.names=TRUE)
| >> C2<- c(L2, recursive=TRUE, use.names=TRUE)
| >> # no issue if use.names=FALSE
| >> U3<- unlist(L2, recursive=TRUE, use.names=FALSE)
| >> C3<- c(L2, recursive=TRUE, use.names=FALSE)
| >>
| >> I took a look at do_unlist and do_c_dflt in bind.c, but I stopped at
| >> NewExtractNames because it is a bit beyond my current understanding.
| >> Any thoughts?
| >
| > I would guess that some loop in the C code is using alloca to allocate
| > temporary storage on the stack, and it's running out of stack space.
| > I'll take a look...
| 
| I couldn't spot this anywhere.  I'm not sure what's happening, except 
| maybe you're just running out of memory:  you're trying to allocate 3e7 
| different names.

... but it is working steadily on it which an R session with more VIRT ram
(per htop) than physical memory. 

Dirk

| 
| Duncan Murdoch
| 
| >
| > Duncan Murdoch
| >
| >>
| >>> sessionInfo()
| >> R version 2.15.0 (2012-03-30)
| >> Platform: i386-pc-mingw32/i386 (32-bit)
| >>
| >> locale:
| >> [1] LC_COLLATE=English_United States.1252
| >> [2] LC_CTYPE=English_United States.1252
| >> [3] LC_MONETARY=English_United States.1252
| >> [4] LC_NUMERIC=C
| >> [5] LC_TIME=English_United States.1252
| >>
| >> attached base packages:
| >> [1] stats     graphics  grDevices utils     datasets  methods   base
| >>
| >> Please let me know if I forgot anything or if there's anything I can do to help.
| >>
| >> Best,
| >> --
| >> Joshua Ulrich  |  FOSS Trading: www.fosstrading.com
| >>
| >> R/Finance 2012: Applied Finance with R
| >> www.RinFinance.com
| >>
| >> ______________________________________________
| >> R-devel at r-project.org mailing list
| >> https://stat.ethz.ch/mailman/listinfo/r-devel
| >
| 
| ______________________________________________
| R-devel at r-project.org mailing list
| https://stat.ethz.ch/mailman/listinfo/r-devel

-- 
R/Finance 2012 Conference on May 11 and 12, 2012 at UIC in Chicago, IL
See agenda, registration details and more at http://www.RinFinance.com



More information about the R-devel mailing list