From ligges at statistik.tu-dortmund.de  Thu Feb 23 10:59:31 2012
From: ligges at statistik.tu-dortmund.de (Uwe Ligges)
Date: Thu, 23 Feb 2012 10:59:31 +0100
Subject: [Rd] Silently loading and Depends: versus NAMESPACE imports
In-Reply-To: <CAE9ddGDo7rf9rm6tsRdfhx+C=JHiTWwDeyV8z3jUi-bzR8mkgg@mail.gmail.com>
References: <20237.58927.327444.422917@max.nulle.part>
	<4F0F3EC0.5060500@fhcrc.org>
	<20258.47943.798999.741944@max.nulle.part>
	<4F2419AE.5010203@statistik.tu-dortmund.de>
	<20260.7967.353013.815027@max.nulle.part>
	<CAE9ddGDo7rf9rm6tsRdfhx+C=JHiTWwDeyV8z3jUi-bzR8mkgg@mail.gmail.com>
Message-ID: <4F460E03.1000604@statistik.tu-dortmund.de>



On 23.02.2012 06:40, Suraj Gupta wrote:
> Dirk - I'm having the same issue.  Could you provide the details of your
> solution?

By moving the startup message generation to .onAttach?

Uwe Ligges


>
> On Sat, Jan 28, 2012 at 11:15 AM, Dirk Eddelbuettel<edd at debian.org>  wrote:
>
>>
>> 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
>>
>> ______________________________________________
>> R-devel at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>
>



[Rd] Silently loading and Depends: versus NAMESPACE imports
Uwe Ligges