根据 v2.14 的 R 新闻:
所有包都必须有一个命名空间,如果源中没有提供,则在安装时创建一个。这意味着任何没有命名空间的包都必须在这个版本的 R 下重新安装(但仍然可以使用没有 R 代码的纯数据包)。
如何以编程方式检测 2.13.x 下安装的哪些软件包没有命名空间,以便我知道需要更新什么?
该函数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
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
赶紧跑 :
update.packages(checkBuilt=TRUE)
很棒的线程。我被困在同样的问题上。要完成所有需要完成的工作,您可以:
remove.packages(names(pkgNS[!pkgNS]))
install.packages(names(pkgNS[!pkgNS]))