如何使用Rcpp注册本地函数?

4
我正在编写一个Bioconductor包。为了实现这一点,它需要通过BiocCheck
我使用Rcpp和Rstudio,使用标签//[[Rcpp::export]]和Rcpp类而不是SEXP类使c++代码可用于R。 Rstudio会自动生成Rcpp_export.cpp和Rcpp_export.R文件,这个方法很好用。
然而,BiocCheck对此表示不满:

检查本地例程注册..

注册本地例程!请参见 http://cran.r-project.org/doc/manuals/R-exts.html#Registering-native-routines

那么,有人知道如何解决这个问题吗?

2
请在Bioconductor [devel]邮件列表上提问(这是关于Bioconductor软件包开发问题的适当位置),您可能会被告知要谨慎接受建议。 - Martin Morgan
最简单的方法是在您的NAMESPACE中使用useDynLib(<pkgName>, <fnNames...>) - Kevin Ushey
2个回答

4
我最终成功地使用Rcpp注册原生例程并通过了BiocCheck。我正在使用Rcpp 0.12.9、BiocCheck 1.9.3和Kmisc 0.5.1。
1)在由Rcpp自动生成的文件“RcppExports.cpp”中,在以下位置的每个函数前添加“// [[register]]”:
// my_function
returntype my_function(...);
// [[register]]
RcppExport SEXP packagename_my_function(...) {
BEGIN_RCPP
...
END_RCPP
}

2)然后,在R中运行

Kmisc::registerFunctions(prefix="")

这将创建一个名为“packagename_init.c”的文件。

3)确保您已经

useDynLib(packagename, .registration=TRUE)

在您的NAMESPACE文件中添加.registration=TRUE。对我来说,没有添加.registration=TRUE也可以正常工作。这应该足以通过BiocCheck。您可以使用以下命令检查已注册的例程:

getDLLRegisteredRoutines("packagename")

1

如果有人感兴趣,这是我从Bioconductor开发邮件列表中得到的答案:

“注册本地例程是最佳实践,但不是必需的,并且使用Rcpp很难(我认为)实现。我不会在此方面投入更多精力。”


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接