On 01/02/14 08:13, Duncan Murdoch wrote:
On 31/01/2014 1:46 PM, Paul A. Steckler wrote:
I'm fairly new to R, and have checked the R FAQ and done an
RSiteSearch for help
on this topic, to no avail.

I want to write some R code that has functions at the top-level that
are not visible when
the code is loaded. So in

   fun1 <- function(...)  { ... }

   fun2 <- function(...)  { ... fun1 ...}

I'd like fun2 to be callable, but have fun1 be invisible. That is, the
scope of fun1 is
limited to the file in which it's defined.

In Python, I believe that prepending an underscore to a variable name
limits its scope in this way.
Is there a similar mechanism in R?

There are a couple ways.

The heavyweight way is to write a package that exports fun2 but not
fun1.  fun2 can see fun1, but the rest of the world can't.
Scope isn't limited to one file, any function in the package can see it.

The lightweight way is to define fun1 and fun2 in a local scope, e.g.

fun3 <- local({

   fun1 <- function(...)  { ... }

   fun2 <- function(...)  { ... fun1 ...}
   fun2
})

This way fun1 and fun2 can see each other but nobody else can see them,
and fun3 is a copy of fun2 that is visible in the workspace.  You don't
need a third name, I just changed it to make the explanation easier.

Would it not be more perspicuous to do:

fun2 <- local({

    fun1 <- function(...)  { ... }

    function(...)  { ... fun1 ...}
})

Having fun3 kicking around seems to be an effect brought to you by the Department of Redundancy Department.

cheers,

Rolf

______________________________________________
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.

Reply via email to