2

我正在使用 RcppArmadillo 创建一个包含 c++ 代码的 R 包。其中一个功能需要优化一个功能。目前,我将nloptr::nloptr函数导入c++,然后用它来优化函数。代码在这里:https ://github.com/daijiang/phyr/blob/master/src/pglmm_gaussian.cpp#L267-L282 ;也是第 244-245 行。

因为 的主干nloptr::nloptr是用 C 编写的,所以在 c++ 中调用 R 函数似乎不是最好的方法,并且可能会减慢速度。理想情况下,我们应该直接在 c++ 文件中调用它的 C 函数。但鉴于我对 c/c++ 的经验非常有限,我不知道该怎么做。谁能帮我这个?谢谢!

4

1 回答 1

2

在 nloptr repo 上对此进行了一些积极的讨论。

您更深层次的问题是 nlopt 需要链接,这会使您陷入操作系统依赖,这比纯标头库(如 RcppArmadillo)更难设置。您需要了解更难的步骤,并且没有简单的规则. RcppGSL 包(以及 vignette 和 Rcpp Book 章节)是一个大致等效的示例。

几个月后编辑: 随着新的nloptr版本在 CRAN 上发布,我们编写了一个演示包RcppNLoptExamples(现在也在 CRAN 上),它展示了如何通过 Rcpp 从 C/C++ 代码中使用 nlopt 以从 R 中调用。

于 2018-01-25T16:58:47.600 回答