根据R News for v2.14:
所有包都必须具有命名空间,并且创建一个包 如果未在源中提供安装。这意味着任何 必须在此下重新安装没有命名空间的包 R的版本(但是没有R代码的仅数据包仍然可以 使用)。
如何以编程方式检测2.13.x下安装的软件包没有命名空间,以便知道需要更新的内容?
答案 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]))