about integration of a library into package creation
Nicolas Turenne wrote:
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 :
Nicolas Turenne wrote:
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
library(svcR)
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)),
______________________________________________ R-devel at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel
______________________________________________ R-devel at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel
______________________________________________ R-devel at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel