Re: [Rd] often unnecessary duplicate in sapply / as.vector

From: Martin Morgan <mtmorgan_at_fhcrc.org>
Date: Tue 11 Jul 2006 - 21:27:54 GMT

This is because RObjToCPtr is not quite careful enough with NAMED, rather than an issue with as.XXX

tmp.c: void tmp(double *x) { x[0]=1; return; }

> f <- function(x) x
> x <- 0
> .C("tmp", f(x), DUP=FALSE)

[[1]]
[1] 1

> x

[1] 1

> x <- 0
> y <- x
> .C("tmp", x, DUP=FALSE)

[[1]]
[1] 1

> y

[1] 1

Martin

Prof Brian Ripley <ripley@stats.ox.ac.uk> writes:

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



R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel Received on Wed Jul 12 07:34:15 2006

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.1.8, at Tue 11 Jul 2006 - 22:28:34 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.