将 Rcpp 与 C 代码链接,以实现自适应城域拒绝采样
Link Rcpp with C code for Adaptive Metropolis rejection sampling
我想使用自适应大都市拒绝采样(AMRS)进行吉布斯采样。我可以直接在 R 中使用包HI
并使用算法。但是,由于我的参数太多,因此在 R 中的循环中逐个采样相当慢。所以我正在考虑用 Rcpp 编写整个采样部分。问题是如何在 Rcpp 中使用 AMRS 函数。一种选择是找到一种方法在 Rcpp 中使用 R 函数,但它会很慢。然后我在页面中找到了原始的 C 代码
[1]: AMRS http://www1.maths.leeds.ac.uk/~wally.gilks/adaptive.rejection/web_page/Welcome.html
所以问题变成了如何将 C 代码与 Rcpp 集成。当我搜索"在C++中调用 C"时,这些都是关于首先编译 C,然后是C++,然后是链接。但是我不知道如何在 Rcpp 中做到这一点,因为编译发生在我使用 SourceCpp 时。任何人都可以给我一些如何实现这一目标的建议?
看看HI
如何在他们的包中实现 C 代码。
具体来说,您应该实现自己的版本:
SEXP arms(SEXP bounds, SEXP myldens, SEXP yprev, SEXP size, SEXP rho);
这是在 https://github.com/cran/HI/blob/master/src/arms-R.c#L86-L172
在这种情况下,应选择将 SEXP
对象替换为以下各项的相应Rcpp
数据类型:
/* bounds : boundaries of the support of the density */
/* myldens : R function to evaluate log density */
/* yprev : previous value from markov chain */
/* size : number of sampled values to be obtained */
/* rho : R environment in which the logdensity is evaluated */
注意:实现实际上应该基于包,而不是使用sourceCpp()
相关文章:
- 双链表的自定义实现不起作用(教育)
- 如何检查助推融合序列是否为自适应结构
- C++中排序的自适应功能
- Boost.Spirit.Qi 语法,用于 Boost.Fusion 自适应结构中的默认值
- 自适应路径 - 阿斯塔尔修改
- 具有自适应 std::p air 点类型的 R 树查询
- 如何测试AVL树的自定义实现
- 将自适应阈值应用于范围函数 opencv c++
- DirectX 12自定义实现与DirectX 11相同
- 使用C 使用PayPal自适应付款API的最佳方法是什么?
- 将 Rcpp 与 C 代码链接,以实现自适应城域拒绝采样
- 可以将STD :: StreamBuf的自定义实现中的异常交付给流用户
- 采用 Opencv c++ 的自适应中值滤波器
- 自适应正交 (C++)
- Boost Spirit Parser用三个字符串的矢量编译成一个结构,自适应不工作
- 从链表访问对象(自定义实现)
- OpenCV / C++ - 如何在矢量上使用自适应阈值而不是垫子
- C++中 malloc 的自定义实现
- 您将如何在调度程序中实现这种自适应的"软糖因子"?
- OpenCV中的自适应算法实现