[R] weirdness in sourc()ing a dump() (bug?)

Prof Brian Ripley ripley at stats.ox.ac.uk
Thu May 6 13:46:21 CEST 2004


There is already a bug report PR#4364 on an aspect of this.  The comment 
there is

  dump somehow needs to recognize that expressions in lists 
  probably need to be enclosed in quote().

  S does exactly the same though

(I think it is a symbol not a formal expression in the current examples.)

I believe it is rather difficult to determine what we cannot deparse
successfully, and trying to issue a warning/error would give a false sense
of security.  The code (src/main/deparse.c) suggests that at least

promises
environments
external pointers
weak references

will not get a useful textual representation.  I don't think the goal can
be as Peter describes -- it has to be more limited, and currently symbols
are also on the list.  (We might be able to solve symbols, but it is far
from straightforward -- terms in formulae are symbols, for example, so we
cannot just add quote() around symbols and that does indeed break code.)

There may well be others: it was not so long ago that integer vectors were 
dumped in a text representation that was read back in as numeric.


On 5 May 2004, Peter Dalgaard wrote:

> Prof Brian Ripley <ripley at stats.ox.ac.uk> writes:
> 
> > On Wed, 5 May 2004, Duncan Murdoch wrote:
> > 
> > > On Wed, 5 May 2004 20:20:51 +0100 (BST), Prof Brian Ripley
> > > <ripley at stats.ox.ac.uk> wrote :
> > > 
> > > >I don't think it is a bug.  Note that dump does not even claim to dump
> > > >lists let alone symbols, but ?dump says
> > > >
> > > >     At present the implementation of 'dump' is very incomplete and it
> > > >     really only works for functions and simple vectors.
> > > >
> > > >Given that, this is not unexpected. (Looks like more than one person did 
> > > >not check the help page ....)
> > > >
> > > >I think save/load is a much safer way to handle saving R objects, and it 
> > > >does work in PD's example.
> > > 
> > > I'd still call it a bug, since 'dump("x"); source("dumpdata.R")' could
> > > change the meaning of x without any warning, and that can't be
> > > desirable behaviour.  
> > 
> > That's not what it says it does, and not what the S version achieves 
> > either.  (Do see the documentation on `what is a bug' in the FAQ, which 
> > does not agree with you.)
> 
> Weelll.. The goal of dump/dput is to create a construct that can be
> evaluated so as to yield the original object. This is one place where
> we fail to meet that goal, so I'll call it a bug, documented or not.
> Especially, since it is something we might actually be able to fix
> fairly simply (note "might" -- we've had our share of "fixes" that
> didn't in the deparsing area).
> 
> > I was trying to be constructive: save/load *is* supposed to reproduce
> > objects, and it just not realistic to get dump/source to do that.  And we
> > do warn about it in the documentation and I can see nowhere that
> > recommends dump/save as a way of saving objects ....  (If there is such a 
> > place, then that is a bug and needs fixing.)
> 
> I don't disagree that save/load is a better strategy for data storage,
> but dump and friends do have the potential to create an *editable*
> text representation, so there is some point in trying to make them
> work predictably as far as possible.
> 
> 

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