从 CRAN 镜像安装具有依赖项的本地 R 包

Posted

技术标签:

【中文标题】从 CRAN 镜像安装具有依赖项的本地 R 包【英文标题】:Install a local R package with dependencies from CRAN mirror 【发布时间】:2014-09-20 22:28:22 【问题描述】:

我已经构建了一个 R 包,即我有 mypackage.tar.gz 文件。这个包依赖于其他几个包,都可以从任何 CRAN 镜像下载和安装。

现在我想在尚未安装依赖项的系统上安装此包,我希望在安装包时自动下载并安装依赖项。

我试过了:

install.packages("mypackage.tar.gz",type="source",dependencies=TRUE,repos="http://a.cran.mirror")

但它在镜像上搜索mypackage.tar.gz(显然它没有找到),而如果我设置repos=NULL,它会正确尝试安装本地包文件(如文档所述),但显然它没有找到依赖包。

所以我的问题是:有没有办法执行“混合”安装(具有在线依赖项的本地包)或唯一的方法是手动安装所有依赖项?

【问题讨论】:

相关(可能重复):***.com/questions/5805049/… 惊讶于 R 默认情况下没有提供执行此操作的机制。这不是包管理101吗? 【参考方案1】:

在这里,我将untar()devtools::install() 一起使用,并传入一个已提取源tarball 的目录。

d <- tempdir()
untar("mypackage.tar.gz", compressed="gzip", exdir=d)
devtools::install(file.path(d, "mypackage"), dependencies=TRUE,
                  repos="https://cloud.r-project.org/")

如果您想从多个存储库安装,您可以提供它们的列表。例如,要同时使用 Bioconductor 和 CRAN,您可以运行:

 devtools::install(file.path(d, "mypackage"), dependencies=TRUE,
                   repos=BiocManager::repositories())

注意:我不知道如何直接将 tarball 传递给install(),但是这个解决方案同时工作并且不会留下任何混乱,因为我们提取到一个临时目录。似乎install_local() 应该能够获取 tarball,但尝试这样做时出现错误。

【讨论】:

install_local() 完全符合我的需要。【参考方案2】:

您可以使用 devtools 包中的install。只需运行install("&lt;directory of your package&gt;", dependencies = TRUE)。它的帮助说明:

使用 R CMD INSTALL 安装包。如果尚未安装,还将尝试从 CRAN 安装包的依赖项。

【讨论】:

【参考方案3】:

如果你已经安装了本地包,你应该可以使用 tools 中的几个函数从 CRAN 安装依赖项:

library('tools')
installFoundDepends(pkgDepends('mypackage', local = FALSE)$Found)

注意:您可以通过installFoundDepends 将参数(如repos)传递给install.packages

您还可以使用pkgDepends 输出中的Depends 元素直接传递给install.packages

install.packages(pkgDepends('mypackage')$Depends)

更新:显然无法使用dependencies=FALSE 安装本地软件包。这看起来很奇怪,因为您可以对存储库中的远程包执行此操作。原因(looking at the source code)是if(is.null(repos) &amp; missing(contriburl)),安装是通过对R CMD INSTALL的系统调用来处理的,它没有与依赖相关的参数。

【讨论】:

如果我还没有安装本地包的所有依赖项,我将无法安装它。 不幸的是它不起作用,即使将依赖项设置为 FALSE,实际上手册页明确指定将 repos 设置为 NULL(需要安装本地包),依赖项参数被忽略。跨度> @WoDoSc 好的,许多进一步的测试表明这真的很烦人和令人惊讶。我实际上认为能够在没有依赖关系的情况下安装本地包是 R 的一个非常合理的功能请求,值得提交。

以上是关于从 CRAN 镜像安装具有依赖项的本地 R 包的主要内容,如果未能解决你的问题,请参考以下文章

在R语言中无法设置CRAN镜像问题

R安装包源设置的常见方式及国内常用源

如何在 R 中选择 CRAN 镜像

R升级和包更新

安装没有在R包仓库CRAN上托管的R包

使用composer安装Drupal 8.x但使用本地镜像