[R] getting package version inside .First.lib

Liaw, Andy andy_liaw at merck.com
Thu Jan 27 12:43:05 CET 2005


> From: Prof Brian Ripley 
> 
> On Thu, 27 Jan 2005, Liaw, Andy wrote:
> 
> >> From: Roger Bivand
> >>
> >> On Thu, 27 Jan 2005, Prof Brian Ripley wrote:
> >>
> >>> On Thu, 27 Jan 2005, Adrian Baddeley wrote:
> >>>
> >>>> Greetings -
> >>>>
> >>>> Is it possible, inside .First.lib,
> >>>> to find out the version number of the package that is
> >> being loaded?
> >>>>
> >>>> If only one version of the package has been installed,
> >>>> we could scan the DESCRIPTION file, something like
> >>>>
> >>>> .First.lib <- function(lib, pkg) {
> >>>>    library.dynam("spatstat", pkg, lib)
> >>>>    dfile <- system.file("DESCRIPTION", package="spatstat")
> >>>>    ttt <- scan(dfile, what="", sep="^M", quiet=TRUE)[2]
> >>>
> >>> "\n" not "^M", please, and readLines is better than scan here.
> >>>
> >>>>    vvv <- strsplit(ttt," ")[[1]][2]
> >>>>    cat("spatstat version number",vvv,"\n")
> >>>> }
> >>>>
> >>>> but even this does not seem very safe (it makes
> >> assumptions about the
> >>>> format of the DESCRIPTION file).
> >>>
> >>> It is better to use read.dcf or the installed description
> >> information in
> >>> package.rds. Take a look at how library() does this.
> >>
> >> Or even packageDescription() in utils, which uses 
> read.dcf() and should 
> >> be a way of making sure you get the version even if the underlying 
> >> formatting changes.
> >
> > This is how I do it in randomForest (using .onAttach 
> instead of .First.Lib):
> >
> > .onAttach <- function(libname, pkgname) {
> >    RFver <- if (as.numeric(R.version$major) < 2 &&
> >                 as.numeric(R.version$minor) < 9.0)
> >      package.description("randomForest")["Version"] else
> >    packageDescription("randomForest")$Version
> >    cat(paste("randomForest", RFver), "\n")
> >    cat("Type rfNews() to see new features/changes/bug fixes.\n")
> > }
> 
> Please don't use functions from utils in such places without 
> explicitly 
> loading them from utils unless your package has an explicit 
> dependence on 
> utils (and randomForest does not).
> 
> There was a good reason why I suggested what I did: you don't 
> need the 
> utils namespace for this.

Thanks for the tip!  Will remediate...

Andy
 
> -- 
> Brian D. Ripley,                  ripley at stats.ox.ac.uk
> Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
> University of Oxford,             Tel:  +44 1865 272861 (self)
> 1 South Parks Road,                     +44 1865 272866 (PA)
> Oxford OX1 3TG, UK                Fax:  +44 1865 272595
> 
>




More information about the R-help mailing list