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

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

我已经构建了一个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
4个回答
7
投票

你可以使用devtools包中的install。只需运行install("<directory of your package>", dependencies = TRUE)。它的帮助说明:

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


5
投票

如果您已经安装了本地软件包,则应该能够在工具中使用几个函数来安装CRAN的依赖项:

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

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

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

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

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


2
投票

在这里,我正在使用devtools::install()d <- tempdir() untar("mypackage.tar.gz", compressed="gzip", exdir=d) devtools::install(file.path(d, "mypackage"), dependencies=TRUE, repos="https://cloud.r-project.org/") 并传入已提取源tarball的目录。

Bioconductor

如果要从多个repos安装,可以提供它们的列表。例如,要同时使用 devtools::install(file.path(d, "mypackage"), dependencies=TRUE, repos=BiocInstaller::biocinstallRepos()) 和CRAN,您可以运行:

install()

注意:我无法弄清楚如何直接将tarball传递给install_local(),但是这个解决方案同时工作并且不会留下任何混乱因为我们提取到临时目录。似乎#!/bin/bash echo $@ | sed 's/‘/"/g' | sed 's/’/"/g' | xclip -selection clipboard 应该能够使用tarball,但是在尝试这样做时我遇到了错误。


0
投票

我个人使用RStudio来告诉你缺少哪些依赖项。然后我在下面的小脚本的参数中复制字符串来改变经典的“奇怪”符号“(xclip正在复制到剪贴板[就像在macOS上的pbcopy])。

install.packages(c(ctrl_v__what_to_install))

然后我只使用并且R开始安装所有依赖项。

注意:请记住,上面脚本中写的两个qazxswpoi是不同的,第一次复制这个脚本时,我建议再次复制原始引​​号字符。

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