[R] how to remove the 'promise' attribute of an R object (.Random.seed)?

Prof Brian Ripley ripley at stats.ox.ac.uk
Wed May 23 08:03:31 CEST 2012


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<xieyihui at 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-tierney at 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<xieyihui at gmail.com>
>>> Phone: 515-294-2465 Web: http://yihui.name
>>> Department of Statistics, Iowa State University
>>> 2215 Snedecor Hall, Ames, IA
>>>
>>> ______________________________________________
>>> R-help at 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-tierney at uiowa.edu
>> Iowa City, IA 52242                 WWW:  http://www.stat.uiowa.edu
>
> ______________________________________________
> R-help at 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,                  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



More information about the R-help mailing list