将R包提交的例程注册到cran

时间:2018-06-10 20:05:33

标签: r rstudio packaging cran roxygen2

我想提交一个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 :(得分:1)

您的R code定义了this.setState({ [['first_name']['value']]: e.target.value}) this.setState({ ['first_name'['value']]: e.target.value}) ,但是通过

注册本机例程
rW <- ...

你要求R用表示C级功能的符号覆盖该符号。您可以使用

注册您的例程
{"rW",      (DL_FUNC) &rW,      3},

或如Writing R Extensions所示,在您的NAMESPACE中指明{"C_rW", (DL_FUNC) &rW, 3},