On Fri, Jul 22, 2011 at 8:14 AM, Spencer Graves <spencer.gra...@prodsyse.com > wrote:
> From my personal experience and following this list some for a few > years, the best practice is initially to ignore the compute time question, > because the cost of your time getting it to do what you want is far greater, > at least initially. Don't worry about compute time until it becomes an > issue. When it does, the standard advice I've seen on this list is to > experiment with different ways of writing the same thing in R, guided by > "profiling R code", as described in the "Writing R Extensions" manual. > (Googling for "profiling R code" identified examples.) > > > Hope this helps. > Spencer Graves > > > > On 7/22/2011 6:26 AM, Alireza Mahani wrote: > >> I am developing an R package for internal use, and eventually for public >> release. My understanding is that there is no easy way to avoid copying >> function arguments in R (i.e. we don't have the concept of pointers in R), >> which makes me wary of freely creating chains of function calls since each >> function call implies data copy overhead. >> > AFAIK R does not automatically copy function arguments. R actually tries very hard to avoid copying while maintaining "pass by value" functionality. Consider the following functions and their output: nomod = function(dat) { TRUE } mod = function(dat, i) { dat[5] = 5 TRUE } > vec = rep(0, times = 10) > tracemem(vec) [1] "<0x8c85978>" > nomod(vec) [1] TRUE > mod(vec) tracemem[0x8c85978 -> 0x8c85c70]: mod [1] TRUE So in the nomod function, the argument never actually gets copied (that is what tracemem tracks). R only copies data when you modify an object, not when you simply pass it to a function HTH, ~G > >> Is the above assessment fair? Are there any good write-ups on best >> practices >> for writing efficient R libraries that take into consideration the >> above-mentioned limitations, and any others that might exist? >> >> Thank you, >> Alireza >> >> >> -- >> View this message in context: http://r.789695.n4.nabble.com/** >> Best-practices-for-writing-R-**functions-tp3686674p3686674.**html<http://r.789695.n4.nabble.com/Best-practices-for-writing-R-functions-tp3686674p3686674.html> >> Sent from the R devel mailing list archive at Nabble.com. >> >> ______________________________**________________ >> R-devel@r-project.org mailing list >> https://stat.ethz.ch/mailman/**listinfo/r-devel<https://stat.ethz.ch/mailman/listinfo/r-devel> >> >> > ______________________________**________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/**listinfo/r-devel<https://stat.ethz.ch/mailman/listinfo/r-devel> > -- Gabriel Becker Graduate Student Statistics Department University of California, Davis [[alternative HTML version deleted]] ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel