【发布时间】:2019-07-03 22:23:38
【问题描述】:
我正在查看3.6 of the Rcpp-FAQ 中提供的演示,并试图了解这个插件是如何创建的。提供的独立示例是
gslrng <-
'int seed = Rcpp::as<int>(par) ;
gsl_rng_env_setup();
gsl_rng *r = gsl_rng_alloc (gsl_rng_default);
gsl_rng_set (r, (unsigned long) seed);
double v = gsl_rng_get (r);
gsl_rng_free(r);return Rcpp::wrap(v);'
plug <- Rcpp:::Rcpp.plugin.maker(
include.before = "#include <gsl/gsl_rng.h>",
libs = paste("-L/usr/local/lib/R/site-library/Rcpp/lib -lRcpp",
"-Wl,-rpath,/usr/local/lib/R/site-library/Rcpp/lib",
"-L/usr/lib -lgsl -lgslcblas -lm"))
registerPlugin("gslDemo", plug )
fun <- cxxfunction(signature(par="numeric"), gslrng, plugin="gslDemo")
fun(0)
具体来说,为什么对paste() 的调用是以逗号分隔的? 所有依赖项(头文件目录、链接器目录和库文件的名称)是否应该通过插件处理?
【问题讨论】:
-
这是my previous answer 的后续问题吗?在这种情况下,如果您告诉我们您要实现的目标可能是有意义的。关于
paste的问题是基本的R,而第二个问题比较模糊。 -
@RalfStubner 确实如此! (感谢您的帮助)。我的最终目标是帮助不喜欢 c++ 的统计学家使用c++ library I wrote。我得到了粘贴,是 commas 把我扔了。
-
好的。现在我明白你的意思是哪个逗号了。我没有仔细查看您的库,但是用户是否有必要编写 C++ 代码,或者库的所有功能是否可以作为 R 函数公开?在后一种情况下,您不需要 Rcpp 插件。只需将库包含在 R 包中,并使用 Rcpp 在 R 和库之间进行接口。
-
@RalfStubner 不幸的是,他们需要为每个模型/过滤器对编写一个 c++ 标头(类似于this 每次更改模型或从不同的过滤器继承时都需要重新进行编译.
-
你能像 RcppEigen 或 RcppAramdillo 那样制作只有库头的库吗?这会大大简化事情。
标签: c++ r dependencies rcpp