[Rd] parse_Rd and/or lazyload problem

luke at stat.uiowa.edu luke at stat.uiowa.edu
Thu Nov 5 23:49:54 CET 2009


On Thu, 5 Nov 2009, Mark.Bravington at csiro.au wrote:

> Great-- thanks for the info.
>
> For now, hopefully I can get the behaviour I want by sticking a .Call( 'R_lazyLoadDBflush'...) [as per 'detach'] before calling 'lazyLoad'. Seems to work on my examples, but please let me know if you don't think it'll work generally-- if not, I could presumably create the files under different names and then change them.
>
> Is there merit in making 'makeLazyLoadDB' public, just as 'lazyLoad' already is? It's useful.

The internals of the lazy load mechanism are intended to be private.
This is now emphasized in the lazyLoad help page.  This is under
active development, and we need the freedom to be able to change these
internals as needed.  They may change without notice, so using them
directly in user code or packages is not a good idea and is strongly
discouraged.

luke

>
> Mark
>
> --
> Mark Bravington
> CSIRO Mathematical & Information Sciences
> Marine Laboratory
> Castray Esplanade
> Hobart 7001
> TAS
>
> ph (+61) 3 6232 5118
> fax (+61) 3 6232 5012
> mob (+61) 438 315 623
>
> luke at stat.uiowa.edu wrote:
>> Here is a more stripped down variant generates and error on OS X for
>> me:
>>
>>      mkEg <- function(tm) list(scrunge = as.POSIXct(tm))
>>
>>      extract <- function(db) {
>>  	e<- new.env()
>>  	lazyLoad(db, e)
>>  	as.list( e)
>>      }
>>
>>      eg <- mkEg("2009-11-04 12:49:53")
>>      eg1 <- mkEg("2009-11-04 12:49:28")
>>
>>      tools:::makeLazyLoadDB( eg, '/tmp/ll')
>>      extract('/tmp/ll') # force; OK
>>
>>      tools:::makeLazyLoadDB( eg1, '/tmp/ll')
>>      extract('/tmp/ll')
>>
>> Changing the second set of /tmp/ll makes the symptom go away.
>>
>> I believe this comes down to unintended use of the lazyload mechanism
>> -- in particular it is not intended that a database be rewritten
>> after it has been loaded.  There is a chaching mechanism for improved
>> performance on slow file systems, and I believe what is happening is
>> that the new indices are being used to look in the old chached data.
>> There might be some merit in having lazyLoad call R_lazyLoadDBflush.
>>
>> luke
>>
>> On Tue, 3 Nov 2009, Seth Falcon wrote:
>>
>>> Hi,
>>>
>>> On 11/3/09 6:51 PM, Mark.Bravington at csiro.au wrote:
>>>>
>>>> file.copy( 'd:/temp/Rdiff.Rd', 'd:/temp/scrunge.Rd') # Rdiff.Rd
>>>> from 'tools' package source
>>>>
>>>> eglist<- list( scrunge=parse_Rd(  'd:/temp/scrunge.Rd'))
>>>> tools:::makeLazyLoadDB( eglist, 'd:/temp/ll')
>>>> e<- new.env()
>>>> lazyLoad( 'd:/temp/ll', e)
>>>> as.list( e) # force; OK
>>>>
>>>> eglist1<- list( scrunge=parse_Rd(  'd:/temp/Rdiff.Rd'))
>>>> tools:::makeLazyLoadDB( eglist1, 'd:/temp/ll')
>>>> e<- new.env()
>>>> lazyLoad( 'd:/temp/ll', e)
>>>> as.list( e) # Splat
>>>>
>>>> It doesn't make any difference which file I process first; the error
>>>> comes the second time round.
>>>
>>> If I adjust this example in terms of paths and run on OS X, I get the
>>> following error on the second run:
>>>
>>>> as.list(e) # Splat
>>> Error in as.list.environment(e) : internal error -3 in R_decompress1
>>>
>>> I haven't looked further yet.
>>>
>>> + seth
>>>
>>> ______________________________________________
>>> R-devel at r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-devel
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>

-- 
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 at stat.uiowa.edu
Iowa City, IA 52242                 WWW:  http://www.stat.uiowa.edu



More information about the R-devel mailing list