R包与CRAN和Bioconductor依赖

4

我在本地Git服务器上存储了一个R包。该包有一系列依赖项——来自CRAN和Bioconductor的包。使用devtools包,我可以直接从Git安装:

library(devtools)
install_git("http://mygitserver.com/username/reponame")

我注意到这个安装过程无法安装所有的Bioconductor依赖项,但是所有的CRAN依赖项都已经正确安装。
我该如何设置包的依赖项(在DESCRIPTION文件中),以便所有的Bioconductor包依赖项也能正确安装。当包托管在Bioconductor镜像上并通过biocLite()安装时,我注意到这不是一个问题,这表明也许我可以通过列出一组镜像让install.packages()搜索来解决这个问题,然后声明找不到包。有没有办法自动获取所有这些依赖项?

尝试一下 setRepositories(ind=1:2) - Benjamin
看起来这解决了问题。为什么会有效?它是指定了存储库的“路径”(即CRAN和/或Bioconductor)吗? - Megatron
请看下面我的答案,了解它为什么有效。 - Benjamin
2个回答

2
简短回答: setRepositories(ind=1:2) 简述: setRepositories 的文档告诉我们“已知默认存储库列表存储在文件 'R_Home/etc/repositories' 中”。我们可以通过几种方式找到它,但为了方便起见,让我们将存储库的表格读入 R 中(如果您感兴趣,这将截取该文件中所有注释文档,但您可以使用 readLines 查看它们)。
read.table(file.path(R.home(), "etc", "repositories"), sep = "\t")

                             menu_name                                 URL default source win.binary mac.binary
CRAN                              CRAN                              @CRAN@    TRUE   TRUE       TRUE       TRUE
BioCsoft                 BioC software                %bm/packages/%v/bioc   FALSE   TRUE       TRUE       TRUE
BioCann                BioC annotation     %bm/packages/%v/data/annotation   FALSE   TRUE       TRUE       TRUE
BioCexp                BioC experiment     %bm/packages/%v/data/experiment   FALSE   TRUE       TRUE       TRUE
BioCextra                   BioC extra               %bm/packages/%v/extra   FALSE   TRUE       TRUE       TRUE
CRANextra                CRAN (extras)  http://www.stats.ox.ac.uk/pub/RWin   FALSE   TRUE       TRUE       TRUE
Omegahat                      Omegahat           http://www.omegahat.org/R   FALSE   TRUE      FALSE      FALSE
R-Forge                        R-Forge        http://R-Forge.R-project.org   FALSE   TRUE       TRUE       TRUE
rforge.net                  rforge.net               http://www.rforge.net   FALSE   TRUE       TRUE       TRUE
CRANextra[https]  CRAN (extras, https) https://www.stats.ox.ac.uk/pub/RWin   FALSE   TRUE       TRUE       TRUE
R-Forge[https]         R-Forge [https]       https://R-Forge.R-project.org   FALSE   TRUE       TRUE       TRUE
rforge.net[https]   rforge.net [https]              https://www.rforge.net   FALSE   TRUE       TRUE       TRUE

想象一下,每一行都有一个索引号。当你调用setRepositories(ind = 1:2)时,你告诉R去查看第1行和第2行的存储库。

我注意到一些注释包(例如org.Hs.eg.db)即使在指定了setRepositories(ind=1:5)后仍然找不到。 - Megatron
3
谢谢你的回答,但是如何保证BioCsoft会一直保持在第二个位置呢?对我来说,这似乎是一个可以在未来任何一天改变的神奇数字。 - R Kiselev

1

对于GitHub存储库的另一个解决方案是使用biocLite()

source("https://bioconductor.org/biocLite.R")
biocLite("username/reposname")

这个程序将GitHub包分配到开发者工具,将其他包分配到CRAN/Bioconductor。

source()命令安装或更新BiocInstaller包,因此当您的BiocInstaller版本是最新时,可以采用以下变体。

BiocInstaller::biocLite("username/reposname")

如果您想使用devtools,但需要针对您的R版本和Bioconductor选择正确的仓库

install_git("http://mygitserver.com/username/reponame", 
            repos=BiocInstaller::biocinstallRepos())

repos参数最终会传递给install.packages()函数。具体来说,对于我来说,我有:

> biocinstallRepos()
                                               BioCsoft 
           "https://bioconductor.org/packages/3.3/bioc" 
                                                BioCann 
"https://bioconductor.org/packages/3.3/data/annotation" 
                                                BioCexp 
"https://bioconductor.org/packages/3.3/data/experiment" 
                                              BioCextra 
          "https://bioconductor.org/packages/3.3/extra" 
                                                   CRAN 
                             "https://cran.rstudio.com" 

使用第二个注释包BioCann,URL为:

这也是一个不错的解决方案,但与已经提出的那个一样,它似乎省略了 org.Hs.eg.db。你有什么想法吗?当我运行 install.packages("org.Hs.eg.db", repos=BiocInstaller::biocinstallRepos()) 时,我能够获取该软件包。 - Megatron
你能否让你的示例可重现,即提供一个非托管在Github上的包的URL,该包依赖于或导入org.Hs.eg.db?我已经更新了我的回复,并提供了更多信息。 - Martin Morgan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接