From mtmorgan at fhcrc.org  Wed Oct 18 02:33:33 2006
From: mtmorgan at fhcrc.org (Martin Morgan)
Date: Tue, 17 Oct 2006 17:33:33 -0700
Subject: [Rd] Error condition in evaluating a promise
In-Reply-To: <0359A469-1F7D-4CEF-A408-CCB185D5F90E@r-project.org> (Simon
	Urbanek's message of "Tue, 17 Oct 2006 20:08:20 -0400")
References: <0359A469-1F7D-4CEF-A408-CCB185D5F90E@r-project.org>
Message-ID: <6phvemixy1u.fsf@gopher4.fhcrc.org>

> delayMe <- function() {
+     if (failed) {
+         delayedAssign("x", delayMe(), assign.env=topenv())
+         stop("init me!")
+     } else foo
+ }
> 
> failed <- TRUE
> foo <- "is me"
> delayedAssign("x", delayMe())
> x
Error in delayMe() : init me!
> x
Error in delayMe() : init me!
> failed <- FALSE
> x
[1] "is me"

??

Martin

Simon Urbanek <simon.urbanek at r-project.org> writes:

> Is there a way to raise an error condition when a promise is  
> evaluated such that is can be evaluated again? Right now strange  
> things happen when the evaluation fails:
>
>  > delayedAssign("x", if (failed) stop("you have to initialize me  
> first!") else foo)
>  > foo <- "I'm foo"
>  > failed<-TRUE
>  > x
> Error: you have to initialize me first!
>  > x
> Error: recursive default argument reference
>
> ^^-- from now on x is completely unusable - it has no value (i.e.  
> cannot be passed to any function) and yet won't be evaluated again
>
>  > failed<-FALSE
>  > x
> Error: recursive default argument reference
>  > delayedAssign("x", if (failed) stop("you have to initialize me  
> first!") else foo)
>  > x
> [1] "I'm foo"
>
> I'd expect something like
>  > failed<-TRUE
>  > x
> Error: you have to initialize me first!
>  > x
> Error: you have to initialize me first!
>  > failed<-FALSE
>  > x
> [1] "I'm foo"
>
> Is there a way to achieve that? Intuitively I'd think that this is  
> the desired behavior, because currently the promise is sort of  
> 'broken' after an error (AFAICT the behavior is not documented  
> anywhere) - but then, I wasn't messing with promises until now...
>
> Thanks,
> Simon
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel

-- 
Martin T. Morgan
Bioconductor / Computational Biology
http://bioconductor.org




[Rd] Error condition in evaluating a promise
Martin Morgan