From simon.urbanek at r-project.org  Fri Jul 22 17:36:27 2011
From: simon.urbanek at r-project.org (Simon Urbanek)
Date: Fri, 22 Jul 2011 11:36:27 -0400
Subject: [Rd] Best practices for writing R functions
In-Reply-To: <1311341191873-3686674.post@n4.nabble.com>
References: <1311341191873-3686674.post@n4.nabble.com>
Message-ID: <5344EE50-26A5-40BD-8771-C4805ED50C86@r-project.org>


On Jul 22, 2011, at 9: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.
> 
> Is the above assessment fair?

No. Although R maintains the illusion of pass-by-value, it does to considerable length to prevent copying if not needed:

> r=rnorm(1e6)
> tracemem(r)
[1] "<0x103fa2000>"
> f = function(x) x
> invisible(f(f(f(f(f(f(r)))))))

As you see not a single copy is created even though there are 6 function calls.

As Spencer said, you should not worry unless you see a sign of a problem.

Cheers,
Simon


> 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
> Sent from the R devel mailing list archive at Nabble.com.
> 
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
> 
> 



[Rd] Best practices for writing R functions
Simon Urbanek