Dear Prof. Ripley,
Thanks a lot for your answers!
See inline comments below.
On 24-May-12 12:01, Prof Brian Ripley wrote:
On 24/05/2012 10:38, Jon Olav Skoien wrote:
I have listed A
under Suggests, and have a .onLoad function in B with
if (require(A)) registerS3methods(newMethodsMatrix, package = A, env =
environment(B))
You are not supposed to be calling registerS3methods .... it is only
visible because of the nature of the base namespace and its
documentation says
'Not intended to be called directly.'
And require() is the wrong thing here; you want to register methods on
a namespace. The logic seems to be that you should do that only if
A's namespace is already loaded, but you could load it pre-emptively
with requireNamespace().
Replacing require with requireNamespace does not seem to work for this
case, it fails with the error:
Error: object 'estimateParameters' not found whilst loading namespace
'intamap'
This comes from registerS3methods which cannot find the generic
estimateParameters from parent.env of B (rtop). Is this because
loadNamespace does not attach the namespace to the search path?
List A under Enhances of B.
This seems to be the right thing, as the R extensions manual says: "the
'Enhances' field lists packages "enhanced" by the package at hand, e.g.,
by providing methods for classes from these packages".
However, although it seems I can install and load package B when I
conditionally import package A in the NAMESPACE, R CMD check stops with
the error: Namespace dependency not required: A
If I remove the import, R CMD check is happier, but I cannot load the
package after installing.
I have read about the use of "Suggest", "Enhances" etc in "Writing R
Extensions", but could not figure out the right way to do this. I am
sure there is something I am missing here.
If anyone wants to check possible solutions, package A is "intamap",
available from CRAN, whereas B is "rtop", available from Rforge:
**|install.packages("rtop", repos="http://R-Forge.R-project.org")|**
I guess the problem is that you are trying to do too much with package
rtop. I would consider creating a separate package depending on
intamap (and most likely rtop) which adds the S3 methods for intamap.
I really hoped that would not be necessary, but you are probably right
that it is the only solution if I want to get rid of the note. The
disadvantage is then that I have to clutter the package repository of
CRAN with one more package, which only purpose is to load two other
packages. For me that does not appear as a better solution than having a
package with a note and use of a function that is not intended. But then
I am also not sure how much extra work my current solution would give
the CRAN-maintainers, so if you think an extra package is better I will
follow your advice.
Thanks,
Jon
--
Jon Olav Skøien
Joint Research Centre - European Commission
Institute for Environment and Sustainability (IES)
Land Resource Management Unit
Via Fermi 2749, TP 440, I-21027 Ispra (VA), ITALY
jon.sko...@jrc.ec.europa.eu
Tel: +39 0332 789206
Disclaimer: Views expressed in this email are those of the individual and do
not necessarily represent official views of the European Commission.
______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel