我主要在Rcpp中编写一个R包(因此使用// [[Rcpp::export]]
和compileAttributes()
导出我的函数),但是我的/ src目录还包括一些从其他包中提取的.c文件。到目前为止,这些都是.Call
忠实地找到并导出的compileAttributes()
函数,但是现在我遇到了.C
函数的问题,不幸的是compileAttributes()
也像其他函数一样导出。特别是我的RcppExports.cpp
看起来像这样:
#include <Rcpp.h>
using namespace Rcpp;
... all .cpp functions
RcppExport SEXP pacf1(SEXP, SEXP);
RcppExport void multi_yw(void *, void *, void *, void *, void *, void *, void *, void *, void *, void *); // This is the .C function wrongly exported here.
// ... and some other .c functions
static const R_CallMethodDef CallEntries[] = {
... all .cpp functions
{"multi_yw", (DL_FUNC) &multi_yw, 10}, // This is the .C function wrongly exported here.
{"pacf1", (DL_FUNC) &pacf1, 2},
... and some other .c functions
{NULL, NULL, 0}
};
RcppExport void R_init_mypackage(DllInfo *dll) {
R_registerRoutines(dll, NULL, CallEntries, NULL, NULL);
R_useDynamicSymbols(dll, FALSE);
}
代替上面的内容,我当然希望有一个附加的条目,例如:
static const R_CMethodDef CEntries[] = {
{"multi_yw", (DL_FUNC) &multi_yw, 10},
{NULL, NULL, 0}
};
然后最后应该是:
RcppExport void R_init_mypackage(DllInfo *dll) {
R_registerRoutines(dll, CEntries, CallEntries, NULL, NULL);
R_useDynamicSymbols(dll, FALSE);
}
那么我在这里可以做什么?我想大概可以删除所有// [[Rcpp::export]]
标签并手动设置RcppExports.cpp
,但是也许compileAttributes()
有解决方案?与此相关,我还想知道是否可以导出带有前缀“ CPP_”的.cpp函数符号,以及其他带有“ C_”前缀的符号,并直接在我的R代码中使用.C / .Call
(因为我从不直接使用导出的符号.cpp函数,因此不需要.Call('_mypackage_myfun', ...)
生成的R函数包装器compileAttributes()
。感谢您的帮助。
我主要在Rcpp中编写一个R包(因此使用// [[[Rcpp :: export]]和compileAttributes()来导出我的函数),但是我的/ src目录还包括一些从其他包中获取的.c文件。 。 ...
[好,所以我找到了一种解决方法,它使我可以.Call和.C外部函数,还可以通过R代码直接调用自定义的cpp符号:配方为: