[R] Controlling visibility of top-level functions
Rolf Turner
r.turner at auckland.ac.nz
Fri Jan 31 23:09:36 CET 2014
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
More information about the R-help
mailing list