[R] several functions in one *.R file in a R package

Duncan Murdoch murdoch.duncan at gmail.com
Thu Sep 8 12:02:17 CEST 2011


On 11-09-08 5:28 AM, Jannis wrote:
> Thanks, Duncan, for your reply. You are right, the () in my code are not
> correct. Maybe my problem is that I do not really understand the exact
> effect of this dot . I have no tried with the following file in my /R
> folder in the package:
>
>
> mainfunction<- function(x) {
>      x2<- .subfunction1(x)
>      x3<- .subfunction2(x2)
>      x3
> }
>
> .subfunction1<- function(x) {
>     x*2
> }
> .subfunction2<- function(x) {
>     x*2
> }
>
> After I build the package and load it into R an run (for example):
>
> mainfunction(2)
>
> I get 8, which indicates that the functions are working. The reason that
> made me believe beforehand that the code is not working is that when I
> type the following to see the code of the function:
>
> .subfunction1
>
> or run:
>
> .subfunction1(2)
>
> I get an error that the object .subfunction1 can not be found. Is this
> the desired effect of adding the dot to the function name? Or do I do
> something wrong here?

If you chose to export those names, they would be visible.  If you 
didn't export them, they wouldn't.  The default NAMESPACE generated by 
package.skeleton would not export them.

Duncan Murdoch

>
>
> Thanks
> Jannis
>
>
>
>
> On 09/06/2011 04:46 PM, Duncan Murdoch wrote:
>> On 11-09-06 10:26 AM, Jannis wrote:
>>> Dear list members,
>>>
>>>
>>> i have build a package which contains a collection of my frequently
>>> used functions. To keep the code organized I have broken down some
>>> rather extensive and long functions into individual steps and bundled
>>> these steps in sub-functions that are called inside the main function.
>>>
>>> To keep an overview over which sub-function belongs to which main
>>> function I saved all the respective sub-functions to the same *.R
>>> file as their main-function and gave them names beginning with . to
>>> somehow hide the sub-functions. The result would be one *.R file
>>> in<package>/R for each 'main-function' containing something like:
>>>
>>>
>>> mainfunction<- function() {
>>>     .subfunction1()
>>>     .subfunction2()
>>>     #...
>>> }
>>>
>>> .subfunction1()<- function() {
>>>    #do some stuff
>>> }
>>> .subfunction2()<- function() {
>>>    #do some more stuff
>>> }
>>>
>>>
>>> According to the way I understood the "Writing R Extensions" Manual I
>>> expected this to work. When I load the package, however, I get the
>>> error message that the sub-functions could not be found. Manually
>>> sourcing all files in the<package>/R directory however yields the
>>> expected functionality.
>>>
>>> In what way am I mistaken here? Any ideas?
>>
>> Those definitions of .subfunction1 and .subfunction2 are not
>> syntactically correct:  extra parens.  If that's just a typo in the
>> message, then you'll have to show us real code.  What you describe
>> should work.
>>
>> Duncan Murdoch
>>
>



More information about the R-help mailing list