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

From: <luke-tierney_at_uiowa.edu>
Date: Wed, 23 May 2012 11:22:25 -0500

I'm not persuaded at this point that we want to support use of the lazy loading infrastructure outside the core as we might want to change it in the future. But the principle that promises are an internal implementation detail that should be as invisible at possible at the user level suggest that this should be changed, so R-devel and R-patched now force promises in this case.

There are a number of other cases in the sources that may have similar issues. It would be good to check them over and handle any that need handling in a systematic way. I don't have time to do that now but I'll put it in my queue.

luke

On Wed, 23 May 2012, Yihui Xie wrote:

> 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
>

-- 
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-devel_at_r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel

Received on Wed 23 May 2012 - 16:33:21 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:41:46 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