Как переписать функцию c ++ из пакета R - PullRequest
0 голосов
/ 28 сентября 2019

Я использую функцию compute_iterative_ratings из пакета R "Competrank": 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 ]

1 голос
/ 28 сентября 2019

Код, который вы просматриваете, генерируется автоматически.Этот код будет обновлен при настройке соответствующей функции C ++ и вызове Rcpp::compileAttributes в пакете.Поэтому вместо RcppExports.cpp вы должны отредактировать iterative-ratings.cpp .Это также верно при использовании Rcpp::sourceCpp.

0 голосов
/ 28 сентября 2019

Единственная часть, которую вам нужно изменить, это число от 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 / manual / r-release / R-exts.html # Регистрация собственных процедур

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...