From roebuck at mdanderson.org  Thu Apr 13 22:06:44 2006
From: roebuck at mdanderson.org (Paul Roebuck)
Date: Thu, 13 Apr 2006 15:06:44 -0500 (CDT)
Subject: [Rd] Wishlist: 'quietly' argument for .onAttach() / .First.lib()
In-Reply-To: <39B6DDB9048D0F4DAD42CB26AAFF0AFAFEDAA5@usctmx1106.merck.com>
References: <39B6DDB9048D0F4DAD42CB26AAFF0AFAFEDAA5@usctmx1106.merck.com>
Message-ID: <Pine.OSF.4.58.0604131458490.336486@wotan.mdacc.tmc.edu>

On Thu, 13 Apr 2006, Liaw, Andy wrote:

> From: Bill Dunlap
> >
> > On Thu, 13 Apr 2006, Prof Brian Ripley wrote:
> >
> > > On Thu, 13 Apr 2006, Peter Ruckdeschel wrote:
> > >
> > > > in "Writing R extensions" as well as in the help
> > > > to .onAttach(), you mention that one could
> > > > use this function to issue a start-up message/banner
> > > > for the package.
> > > >
> > > > My little wish for Easter:
> > > >
> > > > a 'quietly'-type argument for .onAttach() / .First.lib() which is
> > > > passed through by functions
> > > > require() and library() respectively,
> > > > and by means of which one could optionally
> > > > suppress this start-up message/banner .
> > > >
> > > > Is this hard to do?
> > >
> > > I believe so (and think we have been here before).  The documented
> > > call sequence is
> > >
> > >       .onLoad(libname, pkgname)
> > >       .onAttach(libname, pkgname)
> > >
> > > the same as .First.lib.  There is no way to add an argument
> > here, as
> > > many existing packages do not support it.  Beyond that, how
> > would you
> > > pass the argument in?  Namespaces and packages are often
> > > loaded/attached implicitly as a result of loading other packages.
> > >
> > > I did think you could make use of an option to decide
> > whether to the
> > > print the message or not, but I have always assumed that
> > those who did
> > > want a banner probably did not want it suppressed.
> >
> > If the .onAttach() used message() instead of cat()
> > to display the banner message then you could use
> > 	suppressMessages(require("randomForest"))
> > to squelch the message.
>
> Thanks!  This looks like a good alternative.  What do others think of this
> approach?

I used an alternative approach myself. This allows the user
enable/disable the banner text quite easily.

.onAttach <- function(libname, pkgname) {
    if (verbose <- getOption("verbose")) {
        ...
        desc <- packageDescription(pkgname)
        cat(sprintf("%s, version %s", desc$Title, desc$Version), "\n")
        cat(sprintf("Type library(help=%s) to see package documentation",
                    libraryPkgName(pkgname)), "\n")
    }
}

----------------------------------------------------------
SIGSIG -- signature too long (core dumped)



[Rd] Wishlist: 'quietly' argument for .onAttach() / .First.lib()
Paul Roebuck