19

根据 v2.14 的 R 新闻:

所有包都必须有一个命名空间,如果源中没有提供,则在安装时创建一个。这意味着任何没有命名空间的包都必须在这个版本的 R 下重新安装(但仍然可以使用没有 R 代码的纯数据包)。

如何以编程方式检测 2.13.x 下安装的哪些软件包没有命名空间,以便我知道需要更新什么?

4

3 回答 3

22

该函数packageHasNamespace持有密钥。与它一起使用installed.packages

以下代码循环遍历 中的所有库位置.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)
  )
}

这段代码的结果是一个命名的逻辑向量pkgNS,如果包有命名空间则为 TRUE,否则为 FALSE。

要仅获取那些没有命名空间的包,请创建pkgNSwhere pkgNSis 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 
于 2011-11-03T16:47:19.133 回答
5

赶紧跑 :

update.packages(checkBuilt=TRUE)
于 2011-11-03T16:54:48.827 回答
3

很棒的线程。我被困在同样的问题上。要完成所有需要完成的工作,您可以:

remove.packages(names(pkgNS[!pkgNS]))
install.packages(names(pkgNS[!pkgNS]))
于 2012-02-07T19:02:55.043 回答