Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

R 2.14 - detect packages without namespace

Tags:

r

cran

According to the R News for v2.14:

All packages must have a namespace, and one is created on installation if not supplied in the sources. This means that any package without a namespace must be re-installed under this version of R (but data-only packages without R code can still be used).

How do I programatically detect which packages installed under 2.13.x don't have a namespace so I know what needs to be updated?

like image 964
SFun28 Avatar asked Nov 03 '11 16:11

SFun28


1 Answers

The function packageHasNamespace holds the key. Use it together with installed.packages:

The following code loops through all of the library locations in .libPaths:

pkgNS <- NULL
for(i in seq_along(.libPaths())){
  libLoc <- .libPaths()[i]
  pkgs <- installed.packages(lib.loc=libLoc)[, 1]
  pkgNS <- c(pkgNS, 
      sapply(unname(pkgs), packageHasNamespace, package.lib=libLoc)
  )
}

The result of this code is a named logical vector pkgNS that is TRUE if the package has a namespace, FALSE if it doesn't.

To get only those packages that don't have a namespace, create a subset of pkgNS where pkgNS is FALSE:

pkgNS[!pkgNS]

      abind      bitops   CircStats    combinat     corpcor      deldir 
      FALSE       FALSE       FALSE       FALSE       FALSE       FALSE 
     Design         evd   financial         fpc      getopt      gsubfn 
      FALSE       FALSE       FALSE       FALSE       FALSE       FALSE 
       ineq       magic     mlbench    optparse     plotrix       ppcor 
      FALSE       FALSE       FALSE       FALSE       FALSE       FALSE 
like image 176
Andrie Avatar answered Nov 15 '22 18:11

Andrie