[R] Controlling visibility of top-level functions

Bert Gunter gunter.berton at gene.com
Sat Feb 1 00:26:17 CET 2014


I think you will find that using namespaces and export directives are
a better way of controlling visibility with packages. That is their
intended purpose.

Cheers,
Bert

Bert Gunter
Genentech Nonclinical Biostatistics
(650) 467-7374

"Data is not information. Information is not knowledge. And knowledge
is certainly not wisdom."
H. Gilbert Welch




On Fri, Jan 31, 2014 at 2:28 PM, Paul A. Steckler <steck at stecksoft.com> wrote:
> 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
>>
>>
>>
>>
>
> ______________________________________________
> R-help at 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.



More information about the R-help mailing list