[Rd] .onLoad failing because could not find function "loadMethod"
Uwe Ligges
ligges at statistik.tu-dortmund.de
Sat Oct 15 17:41:48 CEST 2011
The thing that happens during the check is that the methods package is
not among the automatically loaded and attached packages.
When the pkgB packages is attached, the Namespaces of pkgA and methods
are loaded but not attached.
Note that one of the checks tells you:
"A namespace must be able to be loaded with just the base namespace
loaded: otherwise if the namespace gets loaded by a saved object, the
session will be unable to start."
If you like to see into the details more easily, just start R with
R R_DEFAULT_PACKAGES=NULL
and then try to
library("pkgB")
and you are able to reproduce the check messages.
You can avoid n-1 Warnings/Errors in the checks by adding
library("methods")
in your .onLoad function, but of course you cannot get rid of the check
that checks that the package can be loaded with the base namespace only.
Best,
Uwe Ligges
On 15.10.2011 02:46, Hervé Pagès wrote:
> Hi,
>
> This strange warning happen sometimes when running 'R CMD check':
>
> * checking whether the package can be loaded with stated dependencies
> ... WARNING
>
> Error : .onLoad failed in loadNamespace() for ‘pkgB’, details:
> call: length(new("A"))
> error: could not find function "loadMethod"
> Error: package/namespace load failed for ‘pkgB’
> Execution halted
>
> It looks like this package (or one of its dependent packages) has an
> unstated dependence on a standard package. All dependencies must be
> declared in DESCRIPTION.
> See the information on DESCRIPTION files in the chapter ‘Creating R
> packages’ of the ‘Writing R Extensions’ manual.
>
> The same warning is reported during the 2 next checks:
>
> * checking whether the package can be unloaded cleanly ... WARNING
> <same error here>
> * checking whether the namespace can be loaded with stated dependencies
> ... WARNING
> <same error here>
>
> It seems to happen when pkgB has code in its .onLoad hook that
> tries to call a method defined in pkgA (pkgB imports pkgA) on an object
> 'x' that is an instance of a class defined in pkgA. For some obscure
> reason it seems that, at the time the .onLoad hook is executed, the
> methods package (which is imported in both packages) is not working
> properly.
>
> I've put 2 toy packages here that illustrate the problem:
>
> https://rapidshare.com/files/4043144391/pkgA_1.0.tar.gz
>
> https://rapidshare.com/files/1959508331/pkgB_1.0.tar.gz
>
> I'm using R version 2.14.0 alpha (2011-10-10 r57211).
>
> The .onLoad hook in pkgB is:
>
> .onLoad <- function(libname, pkgname)
> {
> showMethods("length")
> length(new("A"))
> }
>
> Class A and the length method for this class is defined in pkgA.
>
> Because of the showMethods("length") statement, you should see this
> when running R CMD check pkgB_1.0.tar.gz:
>
> * checking whether the package can be loaded with stated dependencies
> ... WARNING
> Function: length (package base)
> x="A"
>
> Error : .onLoad failed in loadNamespace() for ‘pkgB’, details:
> call: length(new("A"))
> error: could not find function "loadMethod"
> Error: package/namespace load failed for ‘pkgB’
> Execution halted
>
> Any insight on this would be appreciated.
>
> Thanks,
> H.
>
More information about the R-devel
mailing list