我一直在 MCMC 算法中使用 deSolve 包来估计 ODE 中的参数,并在 C 中编写了求解器中使用的函数来加速算法。有时,但并非总是Error in .C("unlock solver")
在运行该ode
函数时出现错误。我能够使用命令成功编译和链接 C 文件
system("R CMD SHLIB [insert-file-path]")
dyn.load("[dll-file-path]")
但是当我尝试使用 dll 文件解决 ODE 时,会引发错误。然后,即使运行像下面这样的简单脚本,我也会遇到同样的错误。我认为这个问题与使用编译代码有关,但我不知道如何也找不到关于这个错误的任何参考。
> require(deSolve)
> initVal <- c(y=1)
> times <- seq(0, 1, 0.001)
> parms <- c(k=1)
> model1 <- function(t, y, parms){
+ with(as.list(c(y, parms)),{
+ dy <- -k*y;
+ list(c(dy))
+ })
+ }
> out <- ode(y=initVal, times=times, parms=parms, func=model1)
Error in .C("unlock_solver") :
"unlock_solver" not resolved from current namespace (deSolve)
部分解决方案
如果我重新启动 R 并仅使用该函数加载 DLL dyn.load
,但不编译代码,则该ode
函数运行时不会出现错误。这解决了我的问题,但我仍然不知道为什么。