[Rd] Style question

Hervé Pagès hpages at fhcrc.org
Fri May 30 18:55:31 CEST 2014


Hi Hadley,

On 05/30/2014 07:06 AM, Hadley Wickham wrote:
>> Even more important than choosing between whatever(...)
>> or foo::whatever(...), you should import that function
>> from the foo package by putting
>>
>>    importFrom(foo, whatever)
>>
>> or
>>
>>    import(foo)
>>
>> in your NAMESPACE file.
>>
>> The 1st form also kind of document what function comes from what
>> package.
>>
>> Note that you'll also need to have foo in the Depends or Imports field
>> of your DESCRIPTION file. Which field is appropriate depends on whether
>> or not you want foo to show up in the user's search path when s/he loads
>> your package with 'library(yourpackage)'.
>
> Except that if you do foo::whatever() you don't need to explicitly
> import the function.

There is at least one subtle consequence to keep in mind when doing
this. Of course, whatever choice you make, if the whatever() function
moves to a different package, this breaks your package.
However, if you explicitly import the function, your package will
break at load-time (which is good) and you'll only have to modify
1 line in the NAMESPACE file to fix it. But if you do foo::whatever(),
your package won't break at load-time, only at run-time. Also you'll
have to edit all the calls to foo::whatever() to fix the package.

Probably not a big deal, but in an environment like Bioconductor where
infrastructure classes and functions can be shared by hundreds of
packages, having people use foo::whatever() in a systematic way would
probably make maintenance a little bit more painful than it needs to
be when the need arises to reorganize/refactor parts of the
infrastructure. Also, the ability to quickly grep the NAMESPACE
files of all BioC packages to see who imports what is very convenient
in this situation.

Cheers,
H.

>
> Hadley
>
>

-- 
Hervé Pagès

Program in Computational Biology
Division of Public Health Sciences
Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N, M1-B514
P.O. Box 19024
Seattle, WA 98109-1024

E-mail: hpages at fhcrc.org
Phone:  (206) 667-5791
Fax:    (206) 667-1319



More information about the R-devel mailing list