创建本地 R 包存储库

问题描述 投票:0回答:4

我想创建一个本地 R 包存储库,以便我公司的用户可以从中安装包,系统管理员可以定期更新本地存储库。目前拒绝访问 CRAN 镜像。

有没有简单的方法可以做到这一点?

r r-package
4个回答
47
投票

是的,无论是 CRAN 的副本还是带有本地包的 repo 都很容易设置。大概你想要这个用于 Windows 所以这样做:

  1. 在您的网络服务器上创建一个顶级目录,比如
    R/
  2. 在那里创建通常的层次结构:
    R/bin/windows/contrib/2.11
    。如果您需要支持其他(早期)版本,只需在
    2.10
    目录旁边创建目录
    2.9
    2.11
    ,...
  3. 将您需要的包放入目录(例如,

    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 提供存储库(但对其他或本地托管也很有用),则效果尤其显着。


19
投票
阅读管理员指南的

部分



0
投票
我也无权访问 CRAN 镜像来安装包。因此,我发现这些步骤很有用。

首先,您需要确保您的系统中有以下路径及其目录:“/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()


此时,您可以从 repo 安装包,而无需引用包安装文件的整个路径。例如,要安装

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/")
这种方法对我来说效果很好,但也许其他人有意见和建议可以改进它。

© www.soinside.com 2019 - 2024. All rights reserved.