From ripley at stats.ox.ac.uk  Tue Jul 11 21:32:38 2006
From: ripley at stats.ox.ac.uk (Prof Brian Ripley)
Date: Tue, 11 Jul 2006 20:32:38 +0100 (BST)
Subject: [Rd] often unnecessary duplicate in sapply / as.vector
In-Reply-To: <Pine.LNX.4.64.0607111055000.12437@gannet.stats.ox.ac.uk>
References: <6phlkr5lhf7.fsf@gopher1.fhcrc.org>
	<Pine.LNX.4.64.0607071652450.9075@homer23.u.washington.edu>
	<Pine.LNX.4.64.0607111055000.12437@gannet.stats.ox.ac.uk>
Message-ID: <Pine.LNX.4.64.0607112018020.15720@gannet.stats.ox.ac.uk>

On Tue, 11 Jul 2006, Prof Brian Ripley wrote:

> On Fri, 7 Jul 2006, Thomas Lumley wrote:

> > On Fri, 7 Jul 2006, Martin Morgan wrote:

[...]

> > > More generally, perhaps as.vector might not duplicate when mode(x) == mode ?
> > 
> > This isn't a trivial change, because  mode(x)==mode does not guarantee 
> > that as.vector(x, mode) has no effect.  For example, with mode="numeric" it 
> > removes attributes.
> 
> And with mode="list" it does not (although that is not as documented).
> We can certainly do better.  [This is another of those cases where 'mode' 
> is confusing, and in fact it would be typeof(x) == mode.]

Aargh: of course I should have guessed that quite a few people have 
written code that assumes that e.g. as.double() duplicates.  The first I 
came across is a .Fortran call in smooth.spline with DUP=FALSE which 
despite all the warnings changes its 'w' argument and hence the return 
result from smooth.spline if as.double is made more efficient.

I really have no desire to spend any more time tracking down problems 
caused by such rogue code, so I am going to leave this as is (with as.list 
somewhat more efficient but the as.vector functions always duplicating).

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



[Rd] often unnecessary duplicate in sapply / as.vector
Prof Brian Ripley