[R] Controlling visibility of top-level functions

Paul A. Steckler steck at stecksoft.com
Fri Jan 31 23:28:57 CET 2014


Thanks for the suggestions.

I'm going to need to create an R package, eventually, so I'll use that
mechanism to control visibility.

-- Paul

On Fri, Jan 31, 2014 at 11:13 AM, Duncan Murdoch
<murdoch.duncan at gmail.com> 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.
>
> Duncan Murodch
>
>
>
>




More information about the R-help mailing list