[R] Best way to preallocate numeric NA array?

Petr PIKAL petr.pikal at precheza.cz
Fri Nov 27 10:25:49 CET 2009


Hi

There is one issue which I encountered recently with this type of 
behaviour, 

mat<-matrix(NA,5,4)
fix(mat)

put some number in any cell and close fix

mat
     col1 col2 col3 col4
[1,]   NA   NA   NA   NA
[2,]   NA   NA   NA   NA
[3,]   NA   NA   NA   NA
[4,]   NA   NA   NA   NA
[5,]   NA   NA   NA   NA

No value is put into mat. There is easy workaround, but it can be 
frustrating if somebody tries to find why the value is not inputed. I know 
that it is not preferred way to fill a matrix but if you have such small 
matrix and it has only few non NA values this could be used.

Maybe on help page could be some kind of explanation:

"Fix can not convert a type(mode) of its argument and therefore it is 
possible to input only values which match type of x."

or something like that

Regards
Petr


 
r-help-bounces at r-project.org napsal dne 26.11.2009 17:22:45:

> On Thu, Nov 26, 2009 at 10:03 AM, Rob Steele
> <freenx.10.robsteele at xoxy.net> wrote:
> > These are the ways that occur to me.
> >
> > ## This produces a logical vector, which will get converted to a 
numeric
> > ## vector the first time a number is assigned to it.  That seems
> > ## wasteful.
> > x <- rep(NA, n)
> >
> > ## This does the conversion ahead of time but it's still creating a
> > ## logical vector first, which seems wasteful.
> > x <- as.numeric(rep(NA, n))
> >
> > ## This avoids type conversion but still involves two assignments for
> > ## each element in the vector.
> > x <- numeric(n)
> > x[] <- NA
> >
> > ## This seems reasonable.
> > x <- rep(as.numeric(NA), n)
> >
> > Comments?
> 
> My intuition would be to go with the third method (allocate a numeric
> vector then assign NA to its contents) but I haven't tested the
> different.  In fact, it would be difficult to see differences in, for
> example, execution time unless n was very large.
> 
> This brings up a different question which is, why do you want to
> consider this?  Are you striving for readability, for speed, for low
> memory footprint, for "efficiency" in some other way?  When we were
> programming in S on machines with 1 mips processors and a couple of
> megabytes of memory, such considerations were important.  I'm not sure
> they are quite as important now.
> 
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide 
http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.




More information about the R-help mailing list