[Rd] about integration of a library into package creation

Duncan Murdoch murdoch at stats.uwo.ca
Tue Jun 13 13:12:15 CEST 2006


Nicolas Turenne wrote:
> 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 ?
>   

No, I don't.  When I install quadprog I do see a NAMESPACE file.  Which 
version are you using?  Mine is 1.4-8.  (Use library(help="quadprog") to 
see information on the installed package).


> 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
>>>   
>>>       
>>
>>     
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>



More information about the R-devel mailing list