>>>>> Roebuck,Paul L <proeb...@mdanderson.org> >>>>> on Thu, 12 Apr 2012 14:17:45 -0500 writes:
> On 4/12/12 1:56 PM, "Ken Williams" <ken.willi...@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... Aa..h, now we are getting into a more interesting issue: Fortunately, what you say above has *not* been true for a while (I think, but am not sure, that I was involved in fixing it..): Indeed nowadays, packageDescription() *) *does* use the correct package version, by inspecting the "path" attribute of the package, in the same way as searchpaths() does --- a function, BTW, that I think should be known and used more than I think it is. *) packageVersion() is built on packageDescription() and hence is also correct accordingly. -- Martin Maechler, ETH Zurich (and R core). ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel