我想创建一个本地 R 包存储库,以便我公司的用户可以从中安装包,系统管理员可以定期更新本地存储库。目前拒绝访问 CRAN 镜像。
有没有简单的方法可以做到这一点?
是的,无论是 CRAN 的副本还是带有本地包的 repo 都很容易设置。大概你想要这个用于 Windows 所以这样做:
R/
R/bin/windows/contrib/2.11
。如果您需要支持其他(早期)版本,只需在 2.10
目录旁边创建目录 2.9
,2.11
,...
2.11
),然后切换到该目录并运行以下命令为存储库生成
PACKAGES
和
PACKAGES.gz
文件:
tools::write_PACKAGES(".", type="win.binary")
update.packages(repos="http://my.local.server/R", ask=FALSE)
我什至在
R/zzz.R
中对本地包进行了更新,以便它们自行更新。
五年后编辑:drat 包现在可以自动执行很多操作,如果您还使用 GitHub 通过 http/https 提供存储库(但对其他或本地托管也很有用),则效果尤其显着。
部分。
首先,您需要确保您的系统中有以下路径及其目录:“/R/src/contrib”。如果您没有此路径和这些目录,则需要创建它们。您所有的 R 包文件都将存储在“contrib”目录中。
将包文件添加到“contrib”目录后,您可以使用
utils
包中的
setRepositories
函数来创建存储库。我建议将以下代码添加到您的 .Rprofile 以获取本地存储库:
utils::setRepositories(ind = 0, addURLs = c(WORK = "file://<your higher directories>/R"))
编辑 .Rprofile 后,重新启动 R.
ind = 0
将表明您只需要本地存储库。
addURLs =
选项中可以包含其他存储库,并在字符向量中以逗号分隔。接下来,使用以下代码创建存储库索引:
tools::write_PACKAGES("/<your higher directories>/R/src/contrib", verbose = TRUE)
这将生成用作存储库索引的 PACKAGE 文件。要查看您的存储库中有哪些包,请运行以下代码并查看生成的数据框:
my_packages <- available.packages()
dplyr 包,您可以运行以下命令:
install.packages("dplyr", dependencies = TRUE)
如果您想更进一步并管理不断变化的存储库,您可以安装和使用 miniCRAN 包。否则,每当您的存储库更改时,您都需要执行write_PACKAGES
功能。安装
miniCRAN包后,您可以执行以下代码来创建miniCRAN repo:
my_packages <- available.packages()
miniCRAN::makeRepo(
pkgs = my_packages[,1,
path = "/<your higher directories>/R",
repos = getOption("repos"),
type = "source",
Rversion = R.version,
download = TRUE,
writePACKAGES = TRUE,
quiet = FALSE
)
你只需要为每个 repo 执行一次上面的代码。然后,检查以确保每个 miniCRAN 存储库都已创建。你只需要为每个 repo 做一次:
pkgAvail(
repos = getOption("repos"),
type = "source",
Rversion = R.version,
quiet = FALSE
)
每当新的包文件放入本地仓库时,您可以按如下方式更新本地仓库的索引:
miniCRAN::updateRepoIndex("/<your higher directories>/R/")
最后,作为查看新包是否在索引中的可选步骤,创建可用包的数据框并搜索数据框:
my_packages <- available.packages(repos = "file://<your higher directories>/R/")
这种方法对我来说效果很好,但也许其他人有意见和建议可以改进它。