gpt4 book ai didi

r - "Error in .C("解锁求解器")"deSolve 包中出现错误是什么原因?

转载 作者:行者123 更新时间:2023-12-02 05:23:38 27 4
gpt4 key购买 nike

我一直在 MCMC 算法中使用 deSolve 包来估计 ODE 中的参数,并用 C 语言编写求解器中使用的函数来加速算法。有时,但并非总是如此,在运行 ode 函数时,我会收到错误 Error in .C("unlocksolver") 。我能够使用命令成功编译和链接 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 并仅使用 dyn.load 函数加载 DLL,但不编译代码,则 ode 函数运行时不会出现错误。这解决了我的问题,但我仍然不知道为什么。

最佳答案

编辑:R 帮助列表中 Thomas Petzoldt 提供的真实解决方案:

[The error] occurs, if package deSolve is loaded after the compiled model... The solution is to load deSolve before [before loading DLL's], ideally at the very beginning of your script, and at least before loading/unloading the DLL/.so

如果这不起作用,下面的方法也可以(旧答案):

我找到了一个有点不优雅的解决方案。

问题似乎是 deSolve 中的“unlock_solver”函数无法正确访问。您可以卸载并重新加载整个 deSolve.so 文件,而不用重新启动 R。

为此,您可以使用以下内容:

require(deSolve)

# encounter error

library.dynam.unload("deSolve", libpath=paste(.libPaths()[1], "//deSolve", sep=""))
library.dynam("deSolve", package="deSolve", lib.loc=.libPaths()[1])

如果“.libPaths()[1]”不在 .libPaths 变量的第一个元素中,则需要将其替换为安装 deSolve 的位置。

不过,这有点像大锤。我已向 r-help 列表发送了一个请求,询问是否有某种方法可以更改 R 查找“unlock_solver”的位置,或者仅卸载/重新加载 deSolve 的一部分。

关于r - "Error in .C("解锁求解器")"deSolve 包中出现错误是什么原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18193556/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com