Skip to content

Question about selective importing of package functions...

11 messages · Jonathan Greenberg, Gabor Grothendieck, Dirk Eddelbuettel +3 more

#
On 13-10-20 4:43 PM, Jonathan Greenberg wrote:
You really want to use imports.  Those are defined in the NAMESPACE 
file; you can import everything from a package if you want, but the best 
style is in fact to just import exactly what you need.  This is more 
robust than using Depends, and it doesn't add so much to the user's 
search path, so it's less likely to break something else (e.g. by 
putting a package on the path that masks some function the user already 
had there.)

Duncan Murdoch
#
On Sun, Oct 20, 2013 at 4:49 PM, Duncan Murdoch
<murdoch.duncan at gmail.com> wrote:
That may answer the specific case of the poster but how does one
handle the case
where one wants the user to be able to access the functions in the
dependent package.

For example, sqldf depends on gsubfn which provides fn which is used
with sqldf to
perform substitutions in the SQL string.

library(sqldf)
tt <- 3
fn$sqldf("select * from BOD where Time > $tt")

I don't want to ask the user to tediously issue a library(gsubfn) too since
fn is frequently needed and for literally years this has not been necessary.
Also I don't want to duplicate fn's code in sqldf since that makes the whole
thing less modular -- it would imply having to change fn in two places
if anything
in fn changed.
#
On 20 October 2013 at 16:20, Jonathan Greenberg wrote:
| One more follow-up -- will I now need to include a library() statement in
| each function?

No.

NAMESPACE entry, coupled with Imports: in DESCRIPTION.

Dirk
#
On 13-10-20 4:54 PM, Jonathan Greenberg wrote:
You need to list the other packages in Imports instead of Depends; then 
the answer is yes.

Duncan Murdoch
#
On 13-10-20 6:41 PM, Jonathan Greenberg wrote:
No.  You need to modify both the DESCRIPTION file as you say above, and 
the NAMESPACE file to say what to import.  Once you do that, those 
functions will appear to your own package functions without any prefix 
needed.

Duncan Murdoch
#
On 13-10-20 04:58 PM, Gabor Grothendieck wrote:
There are two answers to this, depending on how much of the dependent 
package you want to make available to the user. If you want most of that 
package to be available then this is the (only?) exception to the rule. 
 From Writing R Extensions:

   Field ?Depends? should nowadays be used rarely, only for packages
   which are intended to be put on the search path to make their
   facilities available to the end user (and not to the package itself):
   for example it makes sense that a user of package latticeExtra would
    want the functions of package lattice made available.

If you really only want to make a couple of functions available then you 
can import and export the functions. Currently this has the unfortunate 
side effect that you need to document the functions, you cannot just 
re-direct to the documentation in the imported package, at least, I have 
not figured out how to do that.

Paul