On 5/19/2006 9:54 AM, Roger D. Peng wrote: > I noticed something recently that I thought was odd: > > delayedAssign("x", { Sys.sleep(5); 1 }) > x ## Hit Ctrl-C within the first second or 2 > > gives me: > > > delayedAssign("x", { Sys.sleep(5); 1 }) > > x ## Hit Ctrl-C within the first second or two > > > x > Error: recursive default argument reference > > > > My only problem here is that now I'm stuck---there's no way to recover > whatever > 'x' was supposed to be (i.e. 1). > > In reality, I want 'x' to be a promise to load a moderately large data > object. > But if I (or a user) Ctrl-C's during the load I'll have to start from > scratch. > Is there anyway to recover the promise (or the value of the expression) in > case > of an interrupt?
I don't know of one. Normally substitute(x) is supposed to retrieve the promise expression, but by a strange quirk of history, it does not work when x is in .GlobalEnv. I'd say the behaviour you're seeing is a bug. If I do > x <- 2 > x <- {Sys.sleep(1); 1} # Break before complete > x [1] 2 nothing is changed about x. I would think the same thing should happen when x is a promise: if the evaluation of the promised expression fails, the promise should not be changed. Duncan Murdoch ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel