From pgilbert902 at gmail.com  Fri Sep 12 21:13:33 2014
From: pgilbert902 at gmail.com (Paul Gilbert)
Date: Fri, 12 Sep 2014 15:13:33 -0400
Subject: [Rd] requireNamespace() questions
Message-ID: <541345DD.1090001@gmail.com>


I am trying to follow directions at 
http://cran.r-project.org/doc/manuals/r-patched/R-exts.html#Suggested-packages 
regarding handling suggested packages with requireNamespace() rather 
than require(), and I have some questions.

1/ When I do requireNamespace() in a function is the loading of the 
namespace only effective within the function?

2/ At the link above in the manual it says "Note the use of rgl:: as 
that object would not necessarily be visible...".   When the required 
package is loading methods, will the method be found when I reference 
the generic, which is not in the package, or do I need to do something 
different?

3/ In some packages I have functions that return an object defined in 
the suggested package being required. For example, a function does 
require("zoo") and then returns a zoo object. So, to work with the 
returned object I am really expecting that zoo will be available in the 
session afterwards. Is it recommended that I just check if the package 
is available on the search path the user has set rather than use 
require() or requireNamespace()?.

Regarding checking the path without actually attaching the package to 
the search path, is there something better than "package:zoo" %in% 
search() or is that the best way?

4/ I have a function in a package that Depends on DBI and suggests 
RMySQL, RPostgreSQL, RSQLite. The function uses dbDriver() in DBI which 
uses do.call(). If I use requireNamespace() in place of require() I get

 > requireNamespace("RMySQL")
Loading required namespace: RMySQL
 > m <- dbDriver("MySQL")
Error in do.call(as.character(drvName), list(...)) :
   could not find function "MySQL"

 > require("RMySQL")
Loading required package: RMySQL
 > m <- dbDriver("MySQL")
 >

Is there a different way to handle this without altering the search path?

The function do.call() does not seem to work with an argument like
    do.call("RMySQL::MySQL", list())
even at the top level, and this situation may be more complicated when 
it is in a required package. What am I missing?

Thanks,
Paul



[Rd] requireNamespace() questions
Paul Gilbert