From ripley at stats.ox.ac.uk  Tue Jun 12 13:12:39 2007
From: ripley at stats.ox.ac.uk (Prof Brian Ripley)
Date: Tue, 12 Jun 2007 12:12:39 +0100 (BST)
Subject: [Rd] bug in R environments? Was: [BioC] 'recursive default
 argument' error...
In-Reply-To: <466E582C.4040108@ebi.ac.uk>
References: <466E582C.4040108@ebi.ac.uk>
Message-ID: <Pine.LNX.4.64.0706121110030.1465@gannet.stats.ox.ac.uk>

On Tue, 12 Jun 2007, Oleg Sklyar wrote:

> Dear developers,
>
> has anyone experienced the problem described below? Is it a bug in
> handling interrupts in R?

I am not sure where you think the 'bug' is in: cf your subject line.
My guess is that the package is using environments in a vulnerable way.

I cannot reproduce your example on my system: I was able to interrupt but 
repeating the as.list worked.  What I suspect may have happened is that 
you have interrupted lazy loading.  From the code

 	    if(PRSEEN(e))
 		errorcall(R_GlobalContext->call,
 			  _("recursive default argument reference"));
 	    SET_PRSEEN(e, 1);
 	    val = eval(PRCODE(e), PRENV(e));
 	    SET_PRSEEN(e, 0);

so you will get this message from a promise whose evaluation was 
incomplete.  I can see several ways around that, but most have runtime 
costs or back-compatibility issues.  (Changing the message may help.)

It looks like rae230a has been implemented to use lazy-loading on whole 
environments (the 'source' is already a lazyload database, so it's not 
transparent).  Lazy-loading was intended for members of environments.

Also, does this happen in R-devel?  There lazy-loading is considerably 
faster and closer to an atomic operation.

All guesswork on something I cannot reproduce, of course.


>
> Best,
> Oleg
>
> -------- Original Message --------
> Subject: Re: [BioC] 'recursive default argument' error in GOENTREZID2GO
> From: Diego Diez <diez at kuicr.kyoto-u.ac.jp>
>
> ...steps that use to reach me to that point. It happens with any
> environment, or at least annotation packages stored as environments.
> I can't think of any reason why this happens but let me show you the
> code:
>
>> library(rae230a)
>> xx <- as.list(rae230aENTREZID)
> ^C
>> xx <- as.list(rae230aENTREZID)
> Error in as.list(rae230aENTREZID) : recursive default argument reference
>
> now, while the as.list() is working, cancel the process with control-
> C, and after that, the mentioned error happens whenever you try to
> repeat the process of transforming the environment to a list. The
> cancel must be done soon after hitting return, I found one case when
> delaying a little made me unable to reproduce the error. Other
> environments found in the package are not affected (i.e.
> rae230aSYMBOL, rae230aGENENAME, etc).
>
> Going deeper to the problem, I found that canceling the environment
> "loading" with any function reproduces the problem:
>
>> is(rae230aSYMBOL)
> ^C
>> is(rae230aSYMBOL)
> Error in .class1(object) : recursive default argument reference
>> rae230aSYMBOL
> Error: recursive default argument reference
>
> By "loading" a mean that the first time I execute as.list
> (rae230aSYMBOL) or is(rae230aSYMBOL) there is a delay which I assume
> is the environment being loaded into memory. Any further execution of
> the same commands will occur almost immediately.
>
> So, why should I cancel an environment loading soon after trying to
> load it? It happens that I was loading an environment inside a
> function, ran the function and wanted to cancel the execution, thus,
> the error appeared and the environemnt was unusable. Anyway, this
> seems to me more an R related issue.
>
> HTH,
>
> Diego.
>
>
>> sessionInfo()
> R version 2.5.0 (2007-04-23)
> powerpc-apple-darwin8.9.1
>
> locale:
> C
>
> attached base packages:
> [1] "stats"     "graphics"  "grDevices" "utils"     "datasets"
> "methods"
> [7] "base"
>
> other attached packages:
>  rae230a
> "1.16.0"
>>
>
>
>
> On Jun 11, 2007, at 11:27 PM, Seth Falcon wrote:
>
>> "James W. MacDonald" <jmacdon at med.umich.edu> writes:
>>
>>> Hi Oleg,
>>>
>>> Oleg Sklyar wrote:
>>>> Hi,
>>>>
>>>> anybody has an idea as for the following error, the example is
>>>> actually
>>>> from the GO package examples. Thanks, Oleg
>>>>
>>>>> library(GO)
>>>>> egId <- "10043"
>>>>> egIdGoData <- GOENTREZID2GO[[egId]]
>>>> Error: recursive default argument reference
>>>
>>> I sometimes see that error as well. I have no idea what causes it,
>>> as it
>>> doesn't seem repeatable. Anyway, quitting R and starting over has
>>> always
>>> fixed the problem for me.
>>
>> Oleg, is this reproducible for you?  I wasn't able to get the error.
>> Have you tried updating to R patched?
>>
>> + seth
>>
>> --
>> Seth Falcon | Computational Biology | Fred Hutchinson Cancer
>> Research Center
>> http://bioconductor.org
>>
>> _______________________________________________
>> Bioconductor mailing list
>> Bioconductor at stat.math.ethz.ch
>> https://stat.ethz.ch/mailman/listinfo/bioconductor
>> Search the archives: http://news.gmane.org/
>> gmane.science.biology.informatics.conductor
>
>

-- 
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595



[Rd] bug in R environments? Was: [BioC] 'recursive default argument' error...
Prof Brian Ripley