从CRAN镜像安装具有依赖关系的本地R包
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从CRAN镜像安装具有依赖关系的本地R包相关的知识,希望对你有一定的参考价值。
我已经构建了一个R包,即我有mypackage.tar.gz文件。此程序包依赖于其他几个程序包,所有程序包均可从任何CRAN镜像下载和安装。
现在我想在尚未安装依赖项的系统上安装此软件包,并且我希望在安装软件包时自动下载和安装依赖项。
我试过了:
install.packages("mypackage.tar.gz",type="source",dependencies=TRUE,repos="http://a.cran.mirror")
但它在镜像上搜索mypackage.tar.gz
(显然它没有找到),而如果我设置repos=NULL
它正确地尝试安装本地包文件(如文档所示),但显然它没有找到依赖包。
所以我的问题是:有没有办法执行'混合'安装(具有在线依赖的本地包)或唯一的方法是手动安装所有依赖项?
你可以使用devtools包中的install
。只需运行install("<directory of your package>", dependencies = TRUE)
。它的帮助说明:
使用R CMD INSTALL安装软件包。如果尚未安装,还会尝试从CRAN安装软件包的依赖项。
如果您已经安装了本地软件包,则应该能够在工具中使用几个函数来安装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()
没有与依赖项相关的参数。
在这里,我正在使用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,但是在尝试这样做时我遇到了错误。
我个人使用RStudio来告诉你缺少哪些依赖项。然后我在下面的小脚本的参数中复制字符串来改变经典的“奇怪”符号“(xclip正在复制到剪贴板[就像在macOS上的pbcopy])。
install.packages(c(ctrl_v__what_to_install))
然后我只使用‘
并且R开始安装所有依赖项。
注意:请记住,上面脚本中写的两个qazxswpoi是不同的,第一次复制这个脚本时,我建议再次复制原始引号字符。
以上是关于从CRAN镜像安装具有依赖关系的本地R包的主要内容,如果未能解决你的问题,请参考以下文章
未从 Additional_repositories 安装 R 包依赖项(重新访问)