[R] checking if a package is installed
Prof Brian Ripley
ripley at stats.ox.ac.uk
Fri Aug 27 08:25:38 CEST 2010
On Thu, 26 Aug 2010, Jorge Ivan Velez wrote:
> Hi pdb,
>
> Take a look at
> http://r.789695.n4.nabble.com/test-if-a-package-is-installed-td1750671.html#a1750674
You are citing yourself with a poor solution (calling
installed.packages()) -- so please don't.
The help page for installed.packages in R-devel says
Note:
This can be slow when thousands of packages are installed, so do
not use this to find out if a named package is installed (use
‘system.file’ or ‘.find.package’) nor to find details of a small
number of packages (use ‘packageDescription’). It needs to read
several files per installed package, which will be slow on Windows
and on some network-mounted file systems.
However, the real question (not the one in the subject line) seems to
be 'is this package usable'? The basis for the answer there is
require() as others have said, but they have not said that require()
can give an error in current R. So you need something like
f_checkpackage <- function(pkg, ...)
tryCatch(require(pkg, character.only=TRUE, ...),
error = function(e) FALSE)
For those unaware of the possible differences between 'installed'
and 'usable', e.g.
- a dependency of 'pkg' may not be available,
- on Mac OS X packages can be installed for only some of the
architectures,
- packages may be installed but without the correct external software
(see the parallel thread on 'rjags').
As from R 2.12.0 require() will contain a tryCatch() test and so
always return TRUE/FALSE.
>
> HTH,
> Jorge
>
>
>
> On Thu, Aug 26, 2010 at 9:07 PM, pdb <> wrote:
>
>>
>> Hi,
>>
>> I am writing a function that requires a specific package to be installed.
>>
>> Is there a way of checking if the package is installed and returning a TRUE
>> / FALSE result so my function can return an appropriate error message and
>> exit the function gracefully rather than just bombing out?
>>
>> I'm thinking along the following lines (but want code that works),
>>
>> f_checkpackage <- function()
>> {
>>
>> if (library(madeupname) == TRUE) {
>> cat("package loaded OK\n")
>> }
>> else
>> {
>> cat("ERROR: package not loaded")
>> }
>>
>> }
>>
>> f_checkpackage()
--
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