[Rd] Error condition in evaluating a promise
Martin Morgan
mtmorgan at fhcrc.org
Wed Oct 18 02:33:33 CEST 2006
> 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
More information about the R-devel
mailing list