[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