From murdoch.duncan at gmail.com  Sun May  6 12:43:58 2012
From: murdoch.duncan at gmail.com (Duncan Murdoch)
Date: Sun, 06 May 2012 06:43:58 -0400
Subject: [Rd] unlist crashes 32-bit R on WinXP when use.names=TRUE
In-Reply-To: <CAPPM_gTSU1+YnCpcHL3JFPv4y7R7eFFOfrTXrEAnCPdJfzdgZQ@mail.gmail.com>
References: <CAPPM_gTSU1+YnCpcHL3JFPv4y7R7eFFOfrTXrEAnCPdJfzdgZQ@mail.gmail.com>
Message-ID: <4FA655EE.5090201@gmail.com>

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.
>
>> 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...

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



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