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

Reply via email to