i follow your recommendation writing this :
in the description file
Depends: R (>= 2.3), quadprog, ade4, spdep
Imports: quadprog, ade4, spdep
in the namespace file
useDynLib(quadprog)
useDynLib(spdep)
useDynLib(ade4)
importFrom("ade4", "dist.dudi")
importFrom("quadprog", "solve.QP")
importFrom("ade4", "mstree")
importFrom("ade4", "neig2mat")
importFrom("ade4", "dist.dudi")
importFrom("ade4", "dudi.pca")
importFrom("ade4", "dudi.coa")
importFrom("spdep", "knearneigh")
I think you are doing too much!
1. You should not use "useDynLib" for the DLL from another package.
Let the other package load its own DLL.
2. If you declare that your package Depends on the other packages,
then they will be loaded and attached, and the importFrom lines will
not be needed.
"Import"ing and "Depend"ing are similar but not identical concepts.
Routines that are imported are available to your package *before* the
global environment (i.e. user workspace). Routines that are in
packages attached by Depends come after the global environment, so
there's a possibility that the user could create a routine named e.g.
"mstree", and your code would use that version, rather than the one
from ade4. So normally "Imports" is better than "Depends".
However, it appears that you can only import packages that have a
namespace. (I was unaware of this restriction; perhaps it's not
really true, and the error message means something else.)
So you can probably get rid of the error message by using only
Depends, but you may want to keep the Imports from packages other than
quadprog.
Duncan Murdoch
and the result of compiling is :
preparing package svcR for lazy loading
Erreur dans loadNamespace(ns, lib.loc) : le package 'quadprog' n'a
pas d'espace de noms
Ex?cution arr?t?e
make: *** [lazyload] Error 1
*** Installation of svcR failed ***
it says that quadprog has not a namespace
perhaps it is due to location of quadprog.dll
i have put it into inst/src directory
thank for help
Nicolas
Uwe Ligges a ?crit :
your answer is correct after checking some doc
but examples are rare
when i write in the description file
Depends: R (>= 2.3), quadprog, ade4, spdep
and in the namespcae file
useDynLib(quadprog)
useDynLib(spdep)
useDynLib(ade4)
importFrom("dist.dudi", "ade4")
Please do it the right way (package name first!):
importFrom("ade4", "dist.dudi")
Uwe Ligges
importFrom("solve.QP", "quadprog")
importFrom("mstree", "ade4")
importFrom("neig2mat", "ade4")
importFrom("dist.dudi", "ade4")
importFrom("dudi.pca", "ade4")
importFrom("dudi.coa", "ade4")
importFrom("knearneigh", "spdep")
i obtain :
Namespace dependencies not required:
dist.dudi dudi.coa dudi.pca knearneigh mstree neig2mat solve.QP
if i delete the importFrom lines
i get an error about "loading / namespace not succesful" for svcr
i think the solution is not far but it is disturbing
thank for help
---
Nicolas
Duncan Murdoch a ?crit :
On 6/12/2006 12:25 PM, Nicolas Turenne wrote:
in that sense, it is useless to load the library from R source
code making my package
which is supposed to include it and load it
so if i understand the R philosophy it is not possible to load
dll from outside ;
the user has to load my package and manually has to load the
necessary libraries
each time he has to use my library, right ?
Not at all. When set up correctly, the user should just need to say
library(svcR) and all necessary packages and DLLs will be loaded.
The way to specify other packages is through the "Depends" line in
the DESCRIPTION file, and/or the import/importFrom lines in your
NAMESPACE file.
Duncan Murdoch
--
Nicolas
Prof Brian Ripley a ?crit :
And also to load the package, maybe with
rterm R_DEFAULT_PACKAGES=NULL
as these messages often indicate missing package dependencies.
* checking package subdirectories ... WARNING
Subdirectory 'src' contains no source files.
* checking R files for syntax errors ... OK
* checking R files for library.dynam ... OK
* checking S3 generic/method consistency ... WARNING
Erreur : le chargement du package / espace de noms a echoue'
pour 'svcR'
Sequence d'appel :
2: stop(gettextf("package/namespace load failed for '%s'",
libraryPkgName(packag
e)),
call. = FALSE, domain = NA)
1: library(package, lib.loc = lib.loc, character.only = TRUE,
verbose =
FALSE)
Execution arrete'e
See section 'Generic functions and methods' of the 'Writing R
Extensions'
manual.
* checking replacement functions ... WARNING
Erreur : le chargement du package / espace de noms a echoue'
pour 'svcR'
Sequence d'appel :
2: stop(gettextf("package/namespace load failed for '%s'",
libraryPkgName(packag
e)),