From hin-tak.leung at cimr.cam.ac.uk  Mon Jun  5 13:37:38 2006
From: hin-tak.leung at cimr.cam.ac.uk (Hin-Tak Leung)
Date: Mon, 05 Jun 2006 12:37:38 +0100
Subject: [Rd] Patch: context stack size in gram.y
In-Reply-To: <200605311553.30722.dreibh@iem.uni-due.de>
References: <200605311442.50544.dreibh@iem.uni-due.de>	<Pine.LNX.4.64.0605311418560.3564@gannet.stats.ox.ac.uk>
	<200605311553.30722.dreibh@iem.uni-due.de>
Message-ID: <44841782.3070406@cimr.cam.ac.uk>

Hmm, I think you can "flatten" the for-loop with something like this, 
without modifying R:

for(ParamAll in 1:(length01*length02*length03*length*4...)) {

idx1 <- as.integer(ParamAll/(length02*length03...))
Param01 <- Param01Set[idx1]
idx2 = as.integer((ParamAll - idx1 * length01)/length03*length04...)
Param02 <- Param02Set[idx2]
...
central code
...
}

It is the same way generalizing addressing matrix element[i,j] as
element[i*length_j + j], etc. Then you won't have over 50 nested
for-loops. If you have something that deeply nested, I would also be 
writing those idx1 <- as.integer(...) in C for speed ( or use
% properly, but it is too early in the morning and my head is a bit 
wuzzy at the moment...), or even the Param01, etc. e.g.

Param01 <- .Call("my_element_selector", c(Parm01Set, Param02Set ...), 
ParamAll)

HTL

Thomas Dreibholz wrote:
> On Wednesday 31 May 2006 15:26, Prof Brian Ripley wrote:
>> On Wed, 31 May 2006, Thomas Dreibholz wrote:
>>> Hi!
>>>
>>> Attached to this mail, you find a patch for gram.y setting a #define
>>> CONTEXT_STACK_SIZE for the context stack size and replacing the following
>>> constants 50 and 49 by CONTEXT_STACK_SIZE and CONTEXT_STACK_SIZE-1. The
>>> new #define makes setting the stack size much more easy; I also have
>>> increased it to 500, because 50 is too small (we use R to iterate through
>>> sets of simulation parameters, which requires a context stack size of
>>> around 100).
>> I think you will have to explain in detail why you need this, when for a
>> decade R users have not reported a need for it.  It is not related to
>> iteration in R, rather to the depth of recursion needed to parse R code.
> 
> We use R to create input files for OMNeT++ simulations. The simulation 
> parameters are defined like this:
> param01Set <- c(...)
> param02Set <- c(...)
> ...
> paramXYSet <- c(...)
> Most of these sets only contain a single element.
> 
> The input file generation, which should be usable for all simulations, works 
> as follows:
> for(param01 in param01Set) {
>  for(param02 in param02Set) {
>   ...
>    for(paramXY in paramXYSet) {
>      Generate input file for these parameter settings
>    }
>   ...
>  }
> }
> 
> The simulation has more than 50 different parameters, so a "contextstack 
> overflow" error will be the result. Increasing the context stack size in 
> gram.y solves this problem. (Clearly, only using "for" iterations for sets 
> consisting of more than one element would solve the problem - but this 
> requires a special version of the parameter generation function for every 
> simulation.)
> 
> 
> Best regards
> 
> 
> ------------------------------------------------------------------------
> 
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel



[Rd] Patch: context stack size in gram.y
Hin-Tak Leung