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

From: Yihui Xie <xie_at_yihui.name>
Date: Wed, 23 May 2012 10:41:04 -0500

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 <xieyihui_at_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
<ripley_at_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<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 ______________________________________________ R-devel_at_r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel
Received on Wed 23 May 2012 - 15:43:16 GMT

This quarter's messages: by month, or sorted: [ by date ] [ by thread ] [ by subject ] [ by author ]

All messages

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Wed 23 May 2012 - 16:51:40 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-devel. Please read the posting guide before posting to the list.

list of date sections of archive