【问题标题】:Install a local R package with dependencies from CRAN mirror从 CRAN 镜像安装具有依赖项的本地 R 包
【发布时间】: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,它会正确尝试安装本地包文件(如文档所述),但显然它没有找到依赖包。

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

【问题讨论】:

标签: r dependencies repository packages cran


【解决方案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 的一个非常合理的功能请求,值得提交。
    猜你喜欢
    • 2021-12-18
    • 2016-04-09
    • 1970-01-01
    • 1970-01-01
    • 2016-12-30
    • 2017-09-04
    • 2012-12-19
    • 2018-02-02
    相关资源
    最近更新 更多