[Rd] about integration of a library into package creation
Nicolas Turenne
nicolas.turenne at jouy.inra.fr
Tue Jun 13 12:52:47 CEST 2006
it looks strange...
if i do only the compiling with the package "spdep"
and i avoid useDynLib, it compiles well,
but with the package "ade4" and "quadprog" it claims that
packages has no namespace
Erreur dans loadNamespace(ns, lib.loc) : le package 'quadprog' n'a pas
d'espace de noms
do you have an explanation ?
thank for help
---
Nicolas
Duncan Murdoch a écrit :
> 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
>>
>
>
>
More information about the R-devel
mailing list