从本地仓库安装具有依赖项的包时出错

Error When Installing Packages with Dependencies from Local Repo

当它们有依赖项时,我在离线安装包时出错。这与 this question 非常相似。我已按照那里的说明进行离线安装。 所以我已经将所有 CRAN 包安装到一个目录并创建了 PACKAGES 文件。

但该答案中概述的过程似乎存在一个微妙的错误

我可以使用以下命令从 Linux 上的本地存储库安装软件包,没有问题,即不指定存储库:

install.packages("/software/r_packages/src/contrib/ZillowR_0.1.0.tar.gz",     lib="/usr/lib64/R/library")

但是,如果我想获取依赖项,我需要使用

将其指向存储库及其 PACKAGES 文件
install.packages("/software/r_packages/src/contrib/ZillowR_0.1.0.tar.gz",     lib="/usr/lib64/R/library", repos="file:///software/r_packages/")

但是如果我这样做,我会收到错误消息:

Warning message:
package ‘/software/r_packages/src/contrib/ZillowR_0.1.0.tar.gz’ is not available (for R version 3.2.3)

我已经测试并确认它正在读取 PACKAGES 文件,因为如果我在 PACKAGES 中的 ZillowR 条目中输入错字,我会收到一条错误消息,表明它无法解析该条目正确。

以下内容对您有用:

install.packages(pkgs = "ZillowR", type = "source", 
                 lib = "/usr/lib64/R/library", 
                 contriburl = "file:///software/r_packages/")

install.packages() 的论据可能相当多,所有默认设置都配置为与从 CRAN(或其他远程存储库)安装的包一起使用。要解压缩这里发生的事情,请考虑使用以下代码从 CRAN 安装 ZillowR:

install.packages(pkgs = "ZillowR")

这是设置了很多默认值,所以你实际上是在调用:

install.packages(pkgs = "ZillowR", lib = .libPaths()[1], 
                 repos = getOption("repos"),
                 contriburl = contrib.url(repos, type),
                 type = getOption("pkgType"))

两个关键默认值调用一些全局选项,在我的安装中设置为:

> getOption("repos")
                                CRAN                            CRANextra 
       "https://cloud.r-project.org" "http://www.stats.ox.ac.uk/pub/RWin" 
> getOption("pkgType")
[1] "both"

您需要(可能)克服这些默认值才能进行本地安装,要克服的关键是 contriburl 的值(继承自 repos。知道这一点,您的直觉似乎(正确地)遵循了 installing a local source package 的说明,例如:

install.packages(pkgs = "/software/r_packages/src/contrib/ZillowR_0.1.0.tar.gz", repos = NULL, type = "source")

但是 install.packages() 的行为在那里完全不同,因为 pkgs 参数期望源 tarball 的 filename(当 repos 因此 contriburlNULL).

对于类似本地 CRAN 的回购,您实际上想要将 pkgs 设置为 包名称 并将 contriburl 设置为本地回购路径.作为参考,这里的 the relevant section of the docs for contriburl:

contriburl URL(s) of the contrib sections of the repositories. Use this argument if your repository mirror is incomplete, e.g., because you burned only the ‘contrib’ section on a CD, or only have binary packages. Overrides argument repos. Incompatible with type = "both".

最后一句说明了您(可能)需要设置 type = "source" 的原因。