From luke at stat.uiowa.edu  Wed Nov  4 22:23:30 2009
From: luke at stat.uiowa.edu (luke at stat.uiowa.edu)
Date: Wed, 4 Nov 2009 15:23:30 -0600 (CST)
Subject: [Rd] parse_Rd and/or lazyload problem
In-Reply-To: <4AF11EA4.7090705@userprimary.net>
References: <62C82B39B8A85E4B95A18F7F7B852F87055595B001@exvic-mbx03.nexus.csiro.au>,
	<4AEB61C4.4050300@stats.uwo.ca>
	<62C82B39B8A85E4B95A18F7F7B852F87055595B002@exvic-mbx03.nexus.csiro.au>,
	<4AEC4954.9070400@stats.uwo.ca>
	<62C82B39B8A85E4B95A18F7F7B852F87055595B003@exvic-mbx03.nexus.csiro.au>,
	<4AED9648.7080702@stats.uwo.ca>
	<62C82B39B8A85E4B95A18F7F7B852F87055595B005@exvic-mbx03.nexus.csiro.au>
	<4AEDEF70.5030004@stats.uwo.ca>
	<62C82B39B8A85E4B95A18F7F7B852F8705559AE070@exvic-mbx03.nexus.csiro.au>
	<4AF11EA4.7090705@userprimary.net>
Message-ID: <alpine.OSX.2.00.0911041508400.2863@luke-tierneys-macbook-pro-15.local>

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
>

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



[Rd] parse_Rd and/or lazyload problem
luke at stat.uiowa.edu