From hpages at fhcrc.org  Fri Feb 24 07:45:12 2012
From: hpages at fhcrc.org (=?ISO-8859-1?Q?Herv=E9_Pag=E8s?=)
Date: Thu, 23 Feb 2012 22:45:12 -0800
Subject: [Rd] Silently loading and Depends: versus NAMESPACE imports
In-Reply-To: <20260.7967.353013.815027@max.nulle.part>
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>
Message-ID: <4F4731F8.5090709@fhcrc.org>

On 01/28/2012 08:15 AM, Dirk Eddelbuettel 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?

Yep. Since in your original post you didn't say that the package
you import had its startup message in the wrong place (.onLoad),
I assumed it was in the right place (.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.

Are you saying you have some control over the package you import so you
could fix it?

H.

>
> 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
> |>
>


-- 
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



[Rd] Silently loading and Depends: versus NAMESPACE imports
=?ISO-8859-1?Q?Herv=E9_Pag=E8s?=