From proebuck at mdanderson.org  Thu Apr 12 21:17:45 2012
From: proebuck at mdanderson.org (Roebuck,Paul L)
Date: Thu, 12 Apr 2012 14:17:45 -0500
Subject: [Rd] [patch] giving library() a 'version' argument
In-Reply-To: <21A5E1E970CD46459ECBE86D6CC4B28C667AAA8C@spexch01.WindLogics.local>
Message-ID: <CBAC9489.2C4E5%proebuck@mdanderson.org>

On 4/12/12 1:56 PM, "Ken Williams" <Ken.Williams at windlogics.com> wrote:

> On April 12, 2012 1:48 PM, Paul Roebuck wrote:
>
>> Not sure I follow you here. The packageVersion() method is essentially a
>> shortcut to packageDescription("MyPackage")$Version. I generally avoid
>> doing package upgrades in my scripts so the loaded package IS the installed
>> package (even when playing .libPaths() tricks).
> 
> The scenario is:
> 
> library(PackageX)  # Quietly loads version 1 of PackageY
> 
> # Try to load a specific version of PackageY
> .libPaths('directory/containing/PackageY/version-2')
> library(PackageY)  # actually does nothing, since it's already loaded
> stopifnot(packageVersion('PackageY') >= 2)  # ??
> 
> 
> The intention of the stopifnot() expression is to make sure version 2 is
> loaded.
> 
> If packageVersion() goes & looks for PackageY in .libPaths() even when the
> package is already loaded, it will provide the wrong answer - because it will
> find version 2, but version 1 is what's loaded.  However, if packageVersion()
> checks the version of what's already loaded, then it would do the right thing
> here.
> 
> I don't think the docs for packageDescription() clarify what happens in this
> case, but I could be missing it.

If you're going to "play" with .libPaths() like that,
it should be done prior to ANY libraries being loaded.

Going about the style you do below, you'd need to parse
sessionInfo() instead. packageVersion() as well as
packageDescription() give you the information based on
the first package in the path with the same name. If you
dynamically change the path, the returned information
could be different...



[Rd] [patch] giving library() a 'version' argument
Roebuck,Paul L