R 2.14 - 检测没有命名空间的包

时间:2011-11-03 16:28:26

标签: r cran

根据R News for v2.14:

  

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

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

3 个答案:

答案 0 :(得分: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。

要仅获取那些没有命名空间的包,请创建pkgNS的子集,其中pkgNS为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 

答案 1 :(得分:5)

跑步:

update.packages(checkBuilt=TRUE)

答案 2 :(得分:3)

好线程。我遇到了同样的问题。要完成所有需要完成的工作,您可以:

remove.packages(names(pkgNS[!pkgNS]))
install.packages(names(pkgNS[!pkgNS]))
相关问题