[R] Hiding a function

Duncan Murdoch murdoch at stats.uwo.ca
Sat Feb 23 14:37:06 CET 2008


On 23/02/2008 8:22 AM, Christophe Genolini wrote:
> Ok, I saw FUNx
> So, I reformulate my question : is there a way, without nesting b( ) in 
> a( ), to make b( ) available only in a( ) ?

Not that I know of.  It will be available to anything using the same 
environment as a(), which in the case of a package with a NAMESPACE 
includes all other functions in the package, and in the case of my 
example below, includes everything else defined in the same local() 
environment (e.g. d()).

Duncan Murdoch

>> Just to clarify, what Duncan was referring to as the
>> alternative was nesting the definition of one function
>> in another, e.g. look at FUNx in by.data.frame --
>> FUNx is available to by.data.frame but is not
>> visible outside of by.data.frame .
>>
>> On Sat, Feb 23, 2008 at 6:09 AM, Duncan Murdoch <murdoch at stats.uwo.ca> wrote:
>>   
>>> On 23/02/2008 5:58 AM, Christophe Genolini wrote:
>>>     
>>>> Duncan Murdoch a écrit :
>>>>       
>>>>> 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
>>>>>         
>>>> If I understand, it is possible only in a package, not in a programme
>>>> (unless the "other ways"), is that it ?
>>>>       
>>> Yes, that's right.  Here's one of the other ways:
>>>
>>> a <- local( {
>>>   b <- function(y){y^2}
>>>   d <- function(y){y^3}
>>>   function(x){
>>>     b(x)+d(x)+2
>>>   }
>>>  })
>>>
>>> I don't find that more readable than if b and d had been defined locally
>>> within a.
>>>
>>> Duncan Murdoch
>>>
>>>
>>> ______________________________________________
>>> 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