Регистрация процедур для отправки пакета R на кран - PullRequest
0 голосов
/ 10 июня 2018

Я хотел бы отправить обновленную версию пакета R от крана, но он не работает из-за примечания:

Не найдено вызовов: 'R_registerRoutines', 'R_useDynamicSymbols'

Я попробовал решение здесь: https://stackoverflow.com/a/42339658/3738150

Запуск tools::package_native_routine_registration_skeleton(".") дает

#include <stdlib.h> // for NULL
#include <R_ext/Rdynload.h>

/* FIXME:  
   Check these declarations against the C/Fortran source code.
*/

/* .C calls */ 
extern void rW(void *, void *, void *);
extern void ry_bing(void *, void *, void *);
extern void ry_bmf(void *, void *, void *, void *);

static const R_CMethodDef CEntries[] = {
    {"rW",      (DL_FUNC) &rW,      3},
    {"ry_bing", (DL_FUNC) &ry_bing, 3},
    {"ry_bmf",  (DL_FUNC) &ry_bmf,  4},
    {NULL, NULL, 0}
};

void R_init_rstiefel(DllInfo *dll)
{
   R_registerRoutines(dll, CEntries, NULL, NULL, NULL);
   R_useDynamicSymbols(dll, FALSE);
}

, который я вставил rstiefel_init.c

Однако, когда я проверяю это, я получаюWarning: failed to assign RegisteredNativeSymbol for rW to rW since rW is already defined in the ‘rstiefel’ namespace и т. Д. Для других определений.

Любая помощь, которую мы будем вам очень благодарны!

Пакет, который я хотел бы отправить, можно найти по адресу: https://github.com/pdhoff/rstiefel

1 Ответ

0 голосов
/ 11 июня 2018

Ваш код R определяет rW <- ..., но, регистрируя собственную подпрограмму с помощью

{"rW",      (DL_FUNC) &rW,      3},

, вы просите R перезаписать этот символ символом, представляющим уровень Cфункция.Вместо этого вы могли бы зарегистрировать свою подпрограмму с помощью

{"C_rW",      (DL_FUNC) &rW,      3},

или когда вы указали useDynLib(..., .fixes = "C_") в NAMESPACE, как указано в Запись R расширений .

...