[R] How do I call a masked function in a package without a na mespace?

Liaw, Andy andy_liaw at merck.com
Tue Mar 15 21:37:26 CET 2005


> From: Gabor Grothendieck
> 
> Dirk Koschuetzki <dkoschuetzki <at> gmx.de> writes:
> 
> : 
> : Hello,
> : 
> : I work with two packages sna and graph from CRAN resp. 
> Bioconductor. Both  
> : packages have a function called "degree". Therefore one of 
> the functions  
> : is masked by the other and which one gets called depends on 
> the order of  
> : loading. The problem is that both package do not have a namespace,  
> : therefore calling the masked function with 
> "package::degree" does not  
> : work. See the following transcript:
> : 
> : $ R --vanilla
> : 
> : [[ Running on Debian Sarge ]]
> : 
> : R : Copyright 2004, The R Foundation for Statistical Computing
> : Version 2.0.1  (2004-11-15), ISBN 3-900051-07-0
> : [...]
> : 
> : > library("sna")
> : > library("graph")
> : Loading required package: cluster
> : Loading required package: Ruuid
> : Creating a new generic function for "print" in "Ruuid"
> : Loading required package: Biobase
> : Loading required package: tools
> : Welcome to Bioconductor
> :           Vignettes contain introductory material.  To view,
> :           simply type: openVignette()
> :           For details on reading vignettes, see
> :           the openVignette help page.
> : > conflicts()
> : [1] "last.warning" "degree"       "body<-"       "print"    
>     "split"
> : [6] "union"
> : 
> : > sna::degree()
> : Error in loadNamespace(name) : package 'sna' does not have 
> a name space
> : > graph::degree()
> : Error in loadNamespace(name) : package 'graph' does not 
> have a name space
> : > sna:::degree
> : Error in loadNamespace(name) : package 'sna' does not have 
> a name space
> : > graph:::degree
> : Error in loadNamespace(name) : package 'graph' does not 
> have a name space
> : 
> : Is there a way to call the masked function via a different way?
> : And I wold like to create my own function degree which will 
> of course  
> : masked both functions and should therefore be able to call 
> both functions.
> : 
> 
> The following looks up the position of the graph package on the
> search path and gets degree specifically from there,
> invokes it with the indicates arguments.
> 
> graph.degree <- function(...)
>    get("degree", grep("package:graph$", search()))(...)
> 

Just 

    get("degree", "package:graph")(...)

will do.  I'd suggest adding require(graph) to make sure it's loaded.

 ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! 
> http://www.R-project.org/posting-guide.html
> 
> 
>




More information about the R-help mailing list