gpt4 book ai didi

r - 包未提供的功能

转载 作者:行者123 更新时间:2023-12-04 16:02:26 25 4
gpt4 key购买 nike

我正在使用 Rcpp 在 R 中实现一种统计方法,并且根据 SO 上给出的重复建议,我将所有这些都放入了一个包中。对于我的实现,我使用了 stochvol 包中提供的随机波动率例程。链接按照 Writing R Extensions 5.4.3 Linking to native routines in other packages 中的描述完成看起来如下(加上 LinkingTo 字段中的 stochvol):

#include <RcppArmadillo.h>
#include <R.h>
#include <R_ext/Rdynload.h>


void sv_update(const Rcpp::NumericVector &data, double *curpara_in, double *h_in,
double &h0, double *mixprob, int *r,
const bool centered_baseline, const double C0, const double cT,
const double Bsigma, const double a0, const double b0,
const double bmu, const double Bmu, const double B011inv,
const double B022inv, const bool Gammaprior, const bool truncnormal,
const double MHcontrol, const int MHsteps, const int parameterization,
const bool dontupdatemu, const double priorlatent0) {
static void(*fun)(const Rcpp::NumericVector &, double *, double *, double &, double *, int *, const bool, const double,
const double, const double, const double, const double, const double, const double, const double, const double,
const bool, const bool, const double, const int, const int, const bool, const double) = NULL;
if (fun==NULL) {
fun = (void(*)(const Rcpp::NumericVector &, double *, double *, double &, double *, int *, const bool, const double,
const double, const double, const double, const double, const double, const double, const double, const double,
const bool, const bool, const double, const int, const int, const bool, const double)) R_GetCCallable("stochvol", "update");
}
return fun(data, curpara_in, h_in, h0, mixprob, r, centered_baseline, C0, cT,
Bsigma, a0, b0, bmu, Bmu, B011inv, B022inv, Gammaprior, truncnormal,
MHcontrol, MHsteps, parameterization, dontupdatemu, priorlatent0);
}

这个函数有很多参数,所以它看起来不是很吸引人,但它已经按预期工作了一段时间了。

我的问题是通常一切正常,所以在开发我的代码时,我编写了运行顺利的单元测试。但是,当我现在尝试在小型模拟中运行时,我得到:

function 'update' not provided by package 'stochvol'

网上资料稀少,但建议in this thread是重新安装包。我刚刚将 R 更新到 3.5.0,没有复制任何包,而是从头开始重新安装所有内容,但问题仍然存在。

关于我可以做些什么来解决这个问题有什么想法吗?

最佳答案

我认为这里有两个问题:

  1. 如果您正在使用您提到的从一个包中正确导出功能并在另一个包中重复使用的机制,那么设置可能不完整(因此无法使用),因为我没有看到 stockvol 提供例程的实际注册。将其与 init.c in RApiSerialize 进行比较导出两个函数。

  2. 现在,对于仅用于 C++ header 的函数,我们不需要它,因此 stochvol 可能意味着仅用于 header ,在这种情况下您不需要此机制。再一次,您引用的 header 具有 R_GetCCallable。您可能需要联系 Gregor 并询问他的意图/查看他是否有示例。对我来说,这与我在包中使用/正在使用的设置不匹配。 [编辑 1:或者也许是这样,我对此不熟悉。 compileAttributes() 似乎创建了类似的东西。]

还有一点:这个机制是针对 C 接口(interface)的。所以不确定将 RcppArmadillo header 放在那里并使用 Rcpp::NumericVector 是否是个好主意——您可能只需要 SEXP

编辑 2: 当然,错误消息 function 'update' not provided by package 'stochvol' 出现在 stochvol 上包实际上并没有运行 R_RegisterCCallable("stockvol", "update") 所以当你尝试 R_GetCCallable("stochvol", "update"); 你确实打了一个非导出对象。因此错误。

关于r - 包未提供的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50128807/

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