Douglas Bates wrote: > On Thu, Nov 26, 2009 at 10:03 AM, Rob Steele > <freenx.10.robste...@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. >
Thanks--good questions. For any code, I'd order the requirements like this: 1) Correct 2) Readable 3) Space efficient 4) Time efficient Compromises are sometimes necessary. R is such an odd language that it really helps readability to settle on easily recognizable idioms. That's true in any language where there's more than one way to do things but I find it especially true in R. I agree that the efficiency of this operation only matters with very large vectors or very many repetitions. ______________________________________________ R-help@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.