On 19/03/14 10:59, Prof Brian Ripley wrote:
On 18/03/2014 21:41, Rolf Turner wrote:


I am currently having, uh, difficulties, with the latest version of
lme4, which I did not have with an elderly version that I was using
previously.  To check things out I installed the elderly version in a
directory called "AltRlib", in my home directory.

I kept the latest version (1.1-5) in a directory called "Rlib" in my
home directory.

I have R_LIBS set equal to "/home/rolf/Rlib" in my environment, so that
"Rlib" gets searched automatically.

If I start R in my home directory and issue the call

     library(lme4,lib.loc="/home/rolf/AltRlib")

then I get the elderly version as required.

If I start R in a subdirectory, say "/home/Rolf/Foo" and issue
the *same command*, I get the 1.1-5 version, *NOT* as required.

After some head-scratching I moved the .RData file in "Foo" to
Save.RData and re-started R.  ***Then*** I got the version of lme4 that
I wanted.

So I removed all traces of results produced by the 1.1-5 version of lme4
from Save.RData (saving them elsewhere for safekeeping), moved
Save.RData back to .RData, re-started R, issued the library command, and
got the unwanted 1.1-5 version!!!

Can anyone explain WTF is going on?  What is hanging around in .RData
that causes library() to ignore the "lib.loc" argument?  How can I keep
library() from ignoring the "lib.loc" argument?

It seems you have already loaded the namespace 'lme4' before you issue
the library() call.

Try loadedNamespaces() to confirm.

As the help says

      ‘library(package)’ and ‘require(package)’ both load the package
      with name ‘package’ and put it on the search list.  ‘require’ is
      designed for use inside other functions; it returns ‘FALSE’ and
      gives a warning (rather than an error as ‘library()’ does by
      default) if the package does not exist.  Both functions check and
      update the list of currently loaded packages and do not reload a
      package which is already loaded.

Thanks Brian. That was indeed the problem. Doing loadedNamespaces() before issuing any library() call did indeed reveal that lme4 was among the loaded namespaces. I found that issuing the command unloadNamespace("lme4") and then issuing the library() command with lib.loc specified got me the elderly version of lme4 that I wanted.

So I can now carry on.

It appears that the presence of "lme4 objects" of *whatever* vintage is triggering the loading of the "lme4" namespace, and the namespace is (of course?!?) that of the version that appears in one of the directories in .libPaths(). Seems obvious in retrospect. Given that one is aware that the presence of "lme4 objects" triggers the loading of the "lme4" namespace.

cheers,

Rolf

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to