如何从R包重写C ++函数

时间:2019-09-28 06:43:27

标签: r rcpp

我正在使用R包“ comperank”中的compute_iterative_ratings函数: https://github.com/cran/comperank/blob/master/src/RcppExports.cpp

我想修改此函数,使其接受另一个参数(称为 amateur 的整数变量),以便该函数变为:

compute_iterative_ratings(rate_fun,player1_id,score1,player2_id,score2,initial_ratings,业余

我只想复制cpp文件,修改它以接受额外的参数,然后将其保存到我的工作目录中,以便我可以在需要时调用sourceCpp。这对我来说是新领域,所以我不确定应该编辑什么。我也不知道最后2个代码块是什么意思。

static const R_CallMethodDef CallEntries[] = {
    {"_comperank_compute_iterative_ratings", (DL_FUNC) &_comperank_compute_iterative_ratings, 6},
    {NULL, NULL, 0}
};

RcppExport void R_init_comperank(DllInfo *dll) {
    R_registerRoutines(dll, NULL, CallEntries, NULL, NULL);
    R_useDynamicSymbols(dll, FALSE);
}

2 个答案:

答案 0 :(得分:1)

您正在查看的代码是自动生成的。当您调整相应的C ++函数并在包中调用Rcpp::compileAttributes时,此代码将更新。因此,您应该编辑iterative-ratings.cpp而不是RcppExports.cpp。使用Rcpp::sourceCpp时也是如此。

答案 1 :(得分:0)

您唯一需要更改的部分是将数字6更改为7,因为它将R告知函数_comperank_compute_iterative_ratings中参数的数量。

static const R_CallMethodDef CallEntries[] = {
    {"_comperank_compute_iterative_ratings", (DL_FUNC) &_comperank_compute_iterative_ratings, 7},
    {NULL, NULL, 0}
};

有关更多信息,请参见 https://cran.r-project.org/doc/manuals/r-release/R-exts.html#Registering-native-routines