Devtools: Check Bioconductor dependencies when running install_github?

Created on 17 Jan 2015  Â·  12Comments  Â·  Source: r-lib/devtools

Hi,
I am trying to run install_github to install an R package hosted on Github. This package has a dependency package that is hosted on Bioconductor but not hosted on CRAN. It seems that install_github will not automatically detect the Bioconductor dependencies so the installation just fails because install_github can not find the denpendency package on CRAN. Now I have to install the Bioconductor package first and then install the Github package. This makes the installation process tedious and frustrated for other users. Is there a way that install_github can also detect the package dependencies on Bioconductor?

Most helpful comment

There is a trick for this: add biocViews: to the package's DESCRIPTION and R will know to search the bioconductor repository automatically for package requirements. This trick is not documented anywhere.

All 12 comments

This works fine for me; can you please provide a reproducible example of when it's not working for you?

Does the following work for you?

devtools::install_github('PeteHaitch/BioCpkgA')

It should install a toy package BioCpkgA whose only dependency is GenomicTuples, which is available via Bioconductor and not CRAN.

# My sesion info
devtools::session_info()
Session info ---------------------------------------------------------------------
 setting  value                       
 version  R version 3.1.2 (2014-10-31)
 system   x86_64, darwin10.8.0        
 ui       RStudio (0.99.234)          
 language (EN)                        
 collate  en_AU.UTF-8                 
 tz       Australia/Melbourne         

Packages -------------------------------------------------------------------------
 package       * version  date       source                              
 Biobase       * 2.26.0   2014-10-14 Bioconductor                        
 BiocGenerics  * 0.12.1   2014-11-14 Bioconductor                        
 BioCpkgA        0.1      2015-03-02 Github (PeteHaitch/BioCpkgA@26d12ba)
 bitops        * 1.0-6    2013-08-17 CRAN (R 3.1.0)                      
 devtools      * 1.7.0    2015-01-17 CRAN (R 3.1.2)                      
 GenomeInfoDb  * 1.2.4    2014-12-19 Bioconductor                        
 GenomicRanges * 1.18.4   2015-01-07 Bioconductor                        
 GenomicTuples * 1.0.0    2014-10-14 Bioconductor                        
 httr          * 0.6.1    2015-01-01 CRAN (R 3.1.2)                      
 IRanges       * 2.0.1    2014-12-12 Bioconductor                        
 packrat       * 0.4.3    2015-01-29 CRAN (R 3.1.2)                      
 Rcpp          * 0.11.4   2015-01-24 CRAN (R 3.1.2)                      
 RCurl         * 1.95-4.5 2014-12-06 CRAN (R 3.1.2)                      
 rstudioapi    * 0.2      2014-12-31 CRAN (R 3.1.2)                      
 S4Vectors     * 0.4.0    2014-10-14 Bioconductor                        
 stringr       * 0.6.2    2012-12-06 CRAN (R 3.1.0)                      
 XVector       * 0.6.0    2014-10-14 Bioconductor

This example does not work for me:

devtools::install_github('PeteHaitch/BioCpkgA')
Downloading github repo PeteHaitch/BioCpkgA@master
Installing BioCpkgA
Installing dependencies for BioCpkgA:
GenomicTuples
Installing package into ‘/home/nsheffield/R’
(as ‘lib’ is unspecified)
'/usr/lib/R/bin/R' --vanilla CMD INSTALL  \
  '/tmp/Rtmp6GpfdN/devtools194d288e6252/PeteHaitch-BioCpkgA-26d12ba'  \
  --library='/home/nsheffield/R' --install-tests 

ERROR: dependency ‘GenomicTuples’ is not available for package ‘BioCpkgA’
* removing ‘/home/nsheffield/R/BioCpkgA’

If I first install GenomicTuples, then it works:

devtools::install_github('PeteHaitch/BioCpkgA')
Downloading github repo PeteHaitch/BioCpkgA@master
Installing BioCpkgA
'/usr/lib/R/bin/R' --vanilla CMD INSTALL  \
  '/tmp/Rtmp6GpfdN/devtools194d690d04ab/PeteHaitch-BioCpkgA-26d12ba'  \
  --library='/home/nsheffield/R' --install-tests 

* installing *source* package ‘BioCpkgA’ ...
** R
** preparing package for lazy loading
** help
*** installing help indices
** building package indices
** testing if installed package can be loaded
* DONE (BioCpkgA)

Here is a package of mine with the same issue: https://github.com/sheffien/LOLA
It will not download and install IRanges, for example.

devtools::session_info()
Session info -------------------------------------------------------------------
 setting  value                       
 version  R version 3.2.0 (2015-04-16)
 system   x86_64, linux-gnu           
 ui       X11                         
 language en_US                       
 collate  en_US.UTF-8                 
 tz       <NA>                        

Packages -----------------------------------------------------------------------
 package       * version  date       source        
 BiocInstaller   1.19.3   2015-04-21 Bioconductor  
 bitops        * 1.0-6    2013-08-17 CRAN (R 3.2.0)
 devtools      * 1.7.0    2015-01-17 CRAN (R 3.2.0)
 httr          * 0.6.1    2015-01-01 CRAN (R 3.2.0)
 RCurl         * 1.95-4.5 2014-12-28 CRAN (R 3.2.0)
 rstudioapi    * 0.3.1    2015-04-07 CRAN (R 3.2.0)
 stringr       * 0.6.2    2012-12-06 CRAN (R 3.2.0)

Hmm, yes there does seem to be a problem. I just tried on a fresh installation of R 3.2 and confirmed that devtools::install_github('PeteHaitch/BioCpkgA') doesn't work unless GenomicTuples is first installed via

source("http://bioconductor.org/biocLite.R")
biocLite("GenomicTuples")

or BiocInstaller::biocLite('GenomicTuples') (if BiocInstaller is already installed).

I thought this used to work (i.e., in R 3.1), but I may be mistaken.

I won't have time to look into this until next week at the earliest, possibly the following week.

# Session info with BioC release
> devtools::session_info()
Session info ---------------------------------------------------------------------
 setting  value                       
 version  R version 3.2.0 (2015-04-16)
 system   x86_64, darwin13.4.0        
 ui       RStudio (0.99.235)          
 language (EN)                        
 collate  en_AU.UTF-8                 
 tz       Australia/Melbourne         

Packages -------------------------------------------------------------------------
 package       * version  date       source        
 BiocInstaller   1.18.1   2015-04-17 Bioconductor  
 bitops        * 1.0-6    2013-08-17 CRAN (R 3.2.0)
 devtools      * 1.7.0    2015-01-17 CRAN (R 3.2.0)
 httr          * 0.6.1    2015-01-01 CRAN (R 3.2.0)
 RCurl         * 1.95-4.5 2014-12-28 CRAN (R 3.2.0)
 rstudioapi    * 0.3.1    2015-04-07 CRAN (R 3.2.0)
 stringr       * 0.6.2    2012-12-06 CRAN (R 3.2.0)

# Session info with BioC devel, i.e., following BiocInstaller::useDevel(TRUE)
> devtools::session_info()
Session info ---------------------------------------------------------------------
 setting  value                       
 version  R version 3.2.0 (2015-04-16)
 system   x86_64, darwin13.4.0        
 ui       RStudio (0.99.235)          
 language (EN)                        
 collate  en_AU.UTF-8                 
 tz       Australia/Melbourne         

Packages -------------------------------------------------------------------------
 package       * version  date       source        
 BiocInstaller   1.19.3   2015-04-20 Bioconductor  
 bitops        * 1.0-6    2013-08-17 CRAN (R 3.2.0)
 devtools      * 1.7.0    2015-01-17 CRAN (R 3.2.0)
 httr          * 0.6.1    2015-01-01 CRAN (R 3.2.0)
 RCurl         * 1.95-4.5 2014-12-28 CRAN (R 3.2.0)
 rstudioapi    * 0.3.1    2015-04-07 CRAN (R 3.2.0)
 stringr       * 0.6.2    2012-12-06 CRAN (R 3.2.0)

Unfortunately I think this is just the reality of relying on bioconductor packages. If anyone has bright ideas about how to make it a bit better, I'd be happy to review a PR.

This is indeed a pity, now the installation instructions for a package of mine ("lamortenera/epicseg") have become more tedious and might scare users.
Maybe that's a very naive and stupid idea, but what argues against providing a flag for allowing installation from Bioconductor? Something like the bioc_required option provided by R-travis?
I guess this could be implemented by installing every dependency with
source("http://bioconductor.org/biocLite.R")
biocLite("pkgname")
instead of
install.packages("pkgname")

That said, devtools is still an awesome package and thanks so much for it.

Or is it possible to add the list of bioconductor repos as a repos source in package_deps??

http://bioconductor.org/packages/release/bioc/
http://bioconductor.org/packages/release/data/annotation
http://bioconductor.org/packages/release/data/experiment
http://bioconductor.org/packages/release/extra

These will return the list of available packages using available_packages, just checked on R 3.2.0 and devtools 1.8.0

This is awesome! My bad that I didn't see it.
Thanks so much!

But it looks like there would need to be a pull request to add these to the package_deps function before they would be useful in install_github??

Ah right, I celebrated too early. I thought that the ... in install_github were used in install, which has also some ... used in install.packages, which has option repos. But this is not working :(

One way to make devtools install dependencies from Bioconductor is like this:

# Install a cool package
devtools::install_github(repo="Bioconductor-mirror/CoolPkg1")
# Human: Error: CoolPkg1 require SomePkgA version x.10.10 ; only SomePkgA version x.9.9 is installed.
# Machine: Look for SomePkgA on gitbub?
# Human: Yes
# Machine: From which github users? 
# [1]  Bioconductor-mirror
# [2] Bioconductor-mirror (use as default)
# Human: Answer: 2
# Machine: Ok, now I will try to install required dependencies from this github user: Bioconductor-mirror
# Machine: Just sit back and relax.
# Mahcine: But beware that you will get all the risk of using unstable versions of packages.
# Human: What?!!! Ok, could you please roll back?
# Machine: No, it's too late. Joking :-)
# Human: Phew! 
# Machine: Rolling back ....

Continued...

# Machine: You know what, maybe you don't need this install_github() at all.
# Machine: To install Bioconductor development versions of packages
# Machine: Just run this:
source("http://bioconductor.org/biocLite.R")
BiocInstaller::useDevel()
biocLite("CoolPkg1")
# Human: Cool. What if things mess up so bad and I want to revert to stable version.
# Machine: No problem, do this:
# Quit current R session and open a new one
source("http://bioconductor.org/biocLite.R")
pkgs <- rownames(installed.packages())
BiocInstaller::useDevel(FALSE)
biocLite(pkgs) # this could take hours to finish.

There is a trick for this: add biocViews: to the package's DESCRIPTION and R will know to search the bioconductor repository automatically for package requirements. This trick is not documented anywhere.

This old issue has been automatically locked. If you believe you have found a related problem, please file a new issue (with reprex) and link to this issue. https://reprex.tidyverse.org/

Was this page helpful?
0 / 5 - 0 ratings