On 06/11/2013 17:20, Adam Clark wrote:
I'm having trouble running the "ode" function from the "deSolve" package.

I am running RStudio under Ubuntu 13.1

I am running ode() on compiled code that returns delta values using the .C
convention. While I can include an example of the code, I suspect that it
will not be helpful, since the problem is not replicable among systems
(e.g. Solaris or Mac).

When I call ode() on my compiled code, it occasionally will return:

Error in .C("unlock_solver") :
   "unlock_solver" not resolved from current namespace (deSolve)


All subsequent calls to ode() return the same error message, regardless of
what I run. The problem is resolved only if I restart RStudio. However,
since I am running many iterations of this command, I would like to find a
way to resolve this without restarting RStudio.

If I call: is.loaded("unlock_solver", PACKAGE="deSolve"), R returns TRUE.

If I call: .C("unlock_solver"), R returns:
list()

If I first unload "deSolve" using
detach("package:deSolve", unload=TRUE), deSolve disappears from my search()
space, but  is.loaded("unlock_solver", PACKAGE="deSolve") still returns
TRUE. If I reload deSolve, the problem persists.

Based on what I have read in the help files on namespace conventions in
packages,  I suspect that the problem is that the .C function
"unlock_solver" is not corrected loaded, or was unloaded but not marked as
unloaded.

I have two guesses for what is going on:
1) "unlock_solver" was loaded using the library.dynam() function, but
unloaded using the dyn.unload() function. As I understand it, this would

Who said it was unloaded?  That it is not by default is explicit in ?detach.

leave a blank entry in the namespace, leading R to think that
"unlock_solver" is loaded, even though the function no longer does
anything. However, even when deSolve is working correctly,
.C("unlock_solver") returns a blank list, so this may not be the case.

2) Some call deep in deSolve is not pointed towards the right package, and
therefore cannot find "unlock_solver".

From the source code for deSolve, posted at
https://r-forge.r-project.org/scm/viewvc.php/pkg/deSolve/src/deSolve_utils.c?view=log&root=desolve&pathrev=344,
"unlock_solver"
seems to be a pretty simple function, inside the deSolve_utils.c file:

void unlock_solver(void) {solver_locked = 0;}

This command is a pretty recent addition to deSolve (it appeared
somewhere between revision 319 and 324), and is meant to "prevent
nesting of solvers that have global variables", according to the
change annotation.


In any case, I'd like to find a way to specifically unload "unlock_solver"
and reload it, or barring that, unload as many of the DLL's associated with
deSolve as possible and reload them. I suspect that this will solve my
problems.

I am not sure why you think it is reasonable to do that. Clearly the designers of deSolve did not think so, as it does not have an .onUnload action.

> library(deSolve)
> names(getLoadedDLLs())
[1] "base"      "utils"     "methods"   "grDevices" "graphics"  "stats"
[7] "deSolve"   "tools"
> detach("package:deSolve", unload=TRUE)
> names(getLoadedDLLs())
[1] "base"      "utils"     "methods"   "grDevices" "graphics"  "stats"
[7] "deSolve"   "tools"

Many thanks, and sorry if this is a silly question,

It is really an R-devel question: see the posting guide. In particular OSes differ in how (or even if) they can reload DLLs, and the details are way too technical for R-help.

In any case, there are no reproduction instructions here: see the posting guide.

Adam



--
Brian D. Ripley,                  rip...@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

______________________________________________
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