[Rd] Silently loading and Depends: versus NAMESPACE imports

Dirk Eddelbuettel edd at debian.org
Sat Jan 28 17:15:27 CET 2012


On 28 January 2012 at 16:52, Uwe Ligges wrote:
| 
| 
| On 27.01.2012 15:57, Dirk Eddelbuettel wrote:
| >
| > On 12 January 2012 at 12:12, Hervé Pagès wrote:
| > | Hi Dirk,
| > |
| > | On 01/11/2012 11:42 AM, Dirk Eddelbuettel wrote:
| > |>
| > |>  R CMD check really hates it when my .onLoad() function contains
| > |>       suppressMessages(library(foo))
| > |
| > | Note that you can always fool 'R CMD check' by doing something like:
| > |
| > |      sillyname<- library
| > |      suppressMessages(sillyname("foo"))
| > |
| > | Also isn't suppressPackageStartupMessages() more appropriate?
| > |
| > |>
| > |>  However, _and for non-public packages not going to CRAN_ I prefer doing this
| > |>  over using explicit Depends or import statements in the NAMESPACE file as the
| > |>  latter do not give me an ability to make the loading less verbose.  With the
| > |>  R universe of packages being as vast as at is, a simple (non-public) package
| > |>  I have loads about five or six other packages explicitly, each of which loads
| > |>  even more.  The net result is totally intimidating _sixty lines full_ of
| > |>  verbose noise that is meaningful to me as an R programmer, but not for the
| > |>  colleagues expected to use the packages. It looks rather uninviting, frankly.
| > |>
| > |>  How do I use imports via NAMESPACE, and yet keep the noise level down to zero?
| > |
| > | If you only need to import foo (i.e. and actually don't need to attach
| > | it to the search path) then putting foo in Imports and using import
| > | statements in NAMESPACE will keep the noise level down to zero.
| >
| > I don't think so.
| >
| > I have an internal package, call it fooUtils, that (among other things) needs
| > to figure at startup whether it runs on this or that OS.
| >
| > So that package fooUtils does
| >
| >      .onLoad<- function(libname, pkgname) {
| >
| >          if (.Platform$OS.type == "windows") {
| >              packageStartupMessage("Running on Windows")
| >      	# [... more stuff here ... ]
| >          } else if (.Platform$OS.type == "unix") {
| >              packageStartupMessage("Running on Linux")
| >      	# [... more stuff here ... ]
| >          } else {
| >              warning("Platform ", .Platform$OS.type, " not recognised")
| >              drives<- NULL
| >          }
| >
| >          # ....
| >
| >      }
| 
| Are you sure you want the messages in .onLoad rather than .onAttach?

Thanks Uwe -- looks like that was exactly the hint I needed.  

By splitting the task across onLoad and onAttach I seem to be able to get
want I need even if the package is "tickled" via NAMESPACE's importFrom.

Dirk

| See ?.onLoad and its "Good practice" section:
| 
| "Loading a namespace should where possible be silent, with startup 
| messages given by .onAttach. These messages (and any essential ones from 
| .onLoad) should use packageStartupMessage so they can be silenced where 
| they would be a distraction."
| 
| Best,
| Uwe
| 
| 
| 
| >
| > and contrary to your claim, this is not silent as soon as I do
| >
| >
| >     importFrom(fooUtils, someThing)
| >
| >
| > the messages above pop up. While I can suppress them for 'normal' loads via
| >
| >     suppressMessages(library(fooUtils))
| >
| > or
| >
| >     suppressPackageStartupMessages(library(fooUtils))
| >
| >
| > I cannot suppress them via NAMESPACE imports.
|  >
| > Dirk
| >
| > | So I guess your question is: how do we suppress package startup messages
| > | for packages listed in Depends?
| > |
| > | Cheers,
| > | H.
| > |
| > |>
| > |>  Dirk
| > |>
| > |
| > |
| > | --
| > | Hervé Pagès
| > |
| > | Program in Computational Biology
| > | Division of Public Health Sciences
| > | Fred Hutchinson Cancer Research Center
| > | 1100 Fairview Ave. N, M1-B514
| > | P.O. Box 19024
| > | Seattle, WA 98109-1024
| > |
| > | E-mail: hpages at fhcrc.org
| > | Phone:  (206) 667-5791
| > | Fax:    (206) 667-1319
| >

-- 
"Outside of a dog, a book is a man's best friend. Inside of a dog, it is too
dark to read." -- Groucho Marx



More information about the R-devel mailing list