Søren Højsgaard
2015-Mar-11 08:36 UTC
[R] Checking whether specific packages (from bioconductor) are installed when loading a package
Dear all, My package 'gRbase' uses three packages from Bioconductor and these are not automatically installed when gRbase is installed. My instructions (on the package webpage) to users are therefore to run: source("http://bioconductor.org/biocLite.R"); biocLite(c("graph","RBGL","Rgraphviz")) When loading gRbase, it is checked whether these Bioconductor packages are available, but I would like to add a message about how to install the packages if they are not. Does this go into .onAttach or .onLoad or elsewhere? Thanks in advance S?ren
Martin Morgan
2015-Mar-11 13:19 UTC
[R] Checking whether specific packages (from bioconductor) are installed when loading a package
On 03/11/2015 01:36 AM, S?ren H?jsgaard wrote:> Dear all, > > My package 'gRbase' uses three packages from Bioconductor and these are not automatically installed when gRbase is installed. My instructions (on the package webpage) to users are therefore to run: >Treat Bioconductor packages as any other, listing them in Depends: or Imports: or Suggests: as described in 'Writing R Extensions'. CRAN builds packages with access to the Bioconductor repository. Your CRAN users chooseBioCmirror() and setRepositories() before using install.packages(), and Bioc dependencies are installed like any other dependency.> source("http://bioconductor.org/biocLite.R"); biocLite(c("graph","RBGL","Rgraphviz")) > > When loading gRbase, it is checked whether these Bioconductor packages are available, but I would like to add a message about how to install the packages if they are not. >This functionality is provided by Depends: and Imports:, so is not relevant for packages listed in this part of your DESCRIPTION file. You're only asking for advice on packages that are in Suggests:. It does not matter that these are Bioconductor packages or CRAN packages or ... the packages in Suggests: are not, by default, installed when your package was installed (see the 'dependencies' argument to install.packages()).> Does this go into .onAttach or .onLoad or elsewhere?Or not at all. If the package belongs in Suggests: and provides some special functionality not needed by the package most of the time (else it would be in Imports: [most likely] or Depends:) then there will be some few points in the code where the package is used and you need to alert the user to the special condition they've encountered. You'll want to fully specify the package and function to be used RBGL::transitive.closure(...) (full specification provides similar advantage to Import:'ing a symbol into your package, avoiding symbol look-up along the search() path, potentially getting a function transitive.closure() defined by the user or a package different from RBGL). If RBGL is not available, the above code will fail, and the user will be told that "there is no package called 'RBGL'". One common strategy for nicer messages is to if (!requireNamespace("RBGL)") stop("your more tailored message") in the few code chunks before your use of RBGL::transitive.closure(). requireNamespace() loads but does not attach the RBGL package, so the symbols are available when fully qualified RBGL:: but the package does not interfere with the user search() path. Which I guess brings us to your question, and the answer is probably that if after the above you were to still wish to add a message at package start-up, then the right place would be .onLoad(), so that users of your package, as well as users of packages that Import: (load) but do not Depend: (attach) on your package, will see the message. Also, this belongs on the R-devel mailing list. Hope that's helpful, Martin> > Thanks in advance > S?ren > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. >-- Computational Biology / Fred Hutchinson Cancer Research Center 1100 Fairview Ave. N. PO Box 19024 Seattle, WA 98109 Location: Arnold Building M1 B861 Phone: (206) 667-2793