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
関数はエラーなしで実行されます。これで問題は解決しましたが、まだ理由がわかりません。