[R] Hiding a function

Christophe Genolini cgenolin at u-paris10.fr
Sat Feb 23 16:58:00 CET 2008


After some private email with some high level programmer (Gabor), I have 
the solution and I can answer to my own question :-)

The problem was 1° to define a function B( ) available only in a 
function A( ) (for code safeness) and 2° to define B( ) elsewhere than 
in A( ) (for code readability)


The solution is the following

# Definition of an environment that will be use in A() (a list will work as well)
envA <- new.env()

# Definition of B(), in environment envA :
envA$b <- function(x) x2

# Definition of A :
A <- function(x) with(envA, {
  B(3)
})

Thanks

Christophe

> On 23/02/2008 5:15 AM, Christophe Genolini wrote:
>> Hi the list
>>
>> Is it possible to 'hide' a function  from the user ? I cut a big 
>> fonction in sub
>> function and I would like to hide the sub function, just like if I 
>> declare them
>> in the big function :
>>
>> --------------
>> a <- function(x){
>>   b <- function(y){y^2}
>>   d <- function(y){y^3}
>>   b(x)+d(x)+2
>> }
>> a(2)
>> # [1] 14
>> b(2)
>> # Error :
>> ----------------
>>
>> I would like the same, but with external declaration (for readability) :
>>
>> ----------------
>> b <- function(y){y^2}
>> d <- function(y){y^3}
>> a <- function(x){
>>   b(x)+d(x)+2
>> }
>> a(2)
>> # [1] 14
>> b(2)
>> # Error
>> ----------------
>>
>> Is it possible ?
>
> Yes, as long as you're using a package with a NAMESPACE, just don't 
> export b and d.  There are other ways too, but they don't improve 
> readability.
>
> Duncan Murdoch
>



More information about the R-help mailing list