OK, I switched to r-devel. I'm caching the random seed by saving and lazy loading .Random.seed, so I think it should always be valid (except that it becomes a promise which is essentially an integer vector).
The complete process is as follows: set.seed(1) # R generates .Random.seed now tools:::makeLazyLoadDB(globalenv(), 'random_db', variables = '.Random.seed') lazyLoad('random_db') rnorm(1) # Error in rnorm(1) : # .Random.seed is not an integer vector but of type 'promise' As I explained earlier, the purpose is for caching when an Sweave document involves with RNG; instead of running set.seed() again, I just lazy-load the seed. I'm not sure if this is a convincing enough application. You might frown on the use of :::, though. Thanks! Regards, Yihui -- Yihui Xie <xieyi...@gmail.com> Phone: 515-294-2465 Web: http://yihui.name Department of Statistics, Iowa State University 2215 Snedecor Hall, Ames, IA On Wed, May 23, 2012 at 1:03 AM, Prof Brian Ripley <rip...@stats.ox.ac.uk> wrote: > On 22/05/2012 22:26, Yihui Xie wrote: >> >> I did not use delayedAssign() directly; I was using lazyLoad() and >> .Random.seed was saved in a database. The real story out there is the >> caching of my knitr package -- lazyLoad() was used to speed up the >> compilation of Sweave documents. >> >> I know lazyLoad() is supposed to be used only by R itself, but it is >> very helpful for the purpose of caching as well. >> >> Or is it possible to change the code in src/main/RNG.c so that the >> seed is force()d if it is a promise? > > > It is possible, but we need to be convinced that it is desirable. The main > point is that you should not be setting .Random.seed (see its help page), > and all the ways R itself sets it create a object of the correct internal > type. The test is there because of people who failed to follow the advice > and set it incorrectly (usually as a double vector). > > If you want to make a case for a change, R-devel would be the appropriate > list and you would need to explain in detail why you thinking setting > .Random.seed is appropriate and exactly how you do it. > > >> Anyway, I can use save() and load() in this case instead of lazyLoad() >> if the above is not going to happen. Thanks a lot! >> >> Regards, >> Yihui >> -- >> Yihui Xie<xieyi...@gmail.com> >> Phone: 515-294-2465 Web: http://yihui.name >> Department of Statistics, Iowa State University >> 2215 Snedecor Hall, Ames, IA >> >> >> On Tue, May 22, 2012 at 12:49 PM,<luke-tier...@uiowa.edu> wrote: >>> >>> On Tue, 22 May 2012, Yihui Xie wrote: >>> >>>> Hi, >>>> >>>> The problem arises when I lazyLoad() the .Random.seed from a >>>> previously saved database. To simplify the process of reproducing the >>>> problem, see the example below: >>>> >>>> ## this assignment may not really make sense, but illustrates the >>>> problem >>>> delayedAssign('.Random.seed', 1L) >>>> >>>> typeof(.Random.seed) >>>> # [1] "integer" >>>> >>>> rnorm(1) >>>> # Error in rnorm(1) : >>>> # .Random.seed is not an integer vector but of type 'promise' >>>> >>>> typeof(.Random.seed) >>>> # [1] "integer" >>>> >>>> So there must be an "attribute" "promise" somewhere attached to >>>> .Random.seed, and I cannot find it. The R function typeof() does not >>>> reveal it, but the TYPEOF() function in src/main/RNG.c says it is a >>>> 'promise'. >>>> >>>> My question is, how to make R use the real value of .Random.seed >>>> instead of complaining about the promise? Thanks! >>> >>> >>> >>> Siple answer: Don't creat the promise in the first place, i.e. don't >>> use delayedAssign. >>> >>> What is the real context where this arises? Knowing that may help us >>> decide whether the internals should address this possibility. >>> >>> Best, >>> >>> luke >>> >>>> >>>> Regards, >>>> Yihui >>>> -- >>>> Yihui Xie<xieyi...@gmail.com> >>>> Phone: 515-294-2465 Web: http://yihui.name >>>> Department of Statistics, Iowa State University >>>> 2215 Snedecor Hall, Ames, IA >>>> >>>> ______________________________________________ >>>> r-h...@r-project.org mailing list >>>> https://stat.ethz.ch/mailman/listinfo/r-help >>>> PLEASE do read the posting guide >>>> http://www.R-project.org/posting-guide.html >>>> and provide commented, minimal, self-contained, reproducible code. >>>> >>> >>> -- >>> Luke Tierney >>> Chair, Statistics and Actuarial Science >>> Ralph E. Wareham Professor of Mathematical Sciences >>> University of Iowa Phone: 319-335-3386 >>> Department of Statistics and Fax: 319-335-3017 >>> Actuarial Science >>> 241 Schaeffer Hall email: luke-tier...@uiowa.edu >>> Iowa City, IA 52242 WWW: http://www.stat.uiowa.edu >> >> >> ______________________________________________ >> r-h...@r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-help >> PLEASE do read the posting guide >> http://www.R-project.org/posting-guide.html >> and provide commented, minimal, self-contained, reproducible code. > > > > -- > Brian D. Ripley, rip...@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 ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel