如何避免使用新的 R 开发版本(R 正在开发(不稳定)(2017-02-15 r72179))在 R CMD check
中出现以下注释?
• checking for unstated dependencies in examples ... OK
• checking line endings in C/C++/Fortran sources/headers ... OK
• checking compiled code ... NOTE
File ‘pkgname/libs/pkgname.so’:
Found no calls to: ‘R_registerRoutines’, ‘R_useDynamicSymbols’
It is good practice to register native routines and to disable symbol
search.
例如 Hmisc
最佳答案
这条消息有点神秘。我还查看了其他包,发现 NAMESPACE 文件中的 useDynLib(packagename)
被 useDynLib(packagename, .registration = TRUE)
替换。
此外,我在 src/
目录中添加了一个名为 registerDynamicSymbol
的 .c
文件,代码如下:
// RegisteringDynamic Symbols
#include <R.h>
#include <Rinternals.h>
#include <R_ext/Rdynload.h>
void R_init_markovchain(DllInfo* info) {
R_registerRoutines(info, NULL, NULL, NULL, NULL);
R_useDynamicSymbols(info, TRUE);
}
我从GitHub Rcpp接受了这个建议。规范引用位于 Writing R Extensions
还有R Devel Mailinglist提供了补充信息。
更新
最直接直接的方法是:
- 使用当前的 R 开发版本(最终将成为 3.4)
- 运行
tools::package_native_routine_registration_sculpture(".")
并将完整输出复制并粘贴到要放入src/的
packagename_init.c
文件中 - 更新
NAMESPACE
,验证useDynLib(packagename, .registration = TRUE)
- 如有必要,请将
exportPattern
替换为export( 要导出的对象列表)
7 月 18 日更新
正如 @Symbolix 使用最新版本的 R 和 RStudio 开发工具所指出的,第 2 点(init.c 文件)似乎由开发工具(使用 RStudio 校验位)或工具包处理。
关于R CMD 检查注释 : Found no calls to: ‘R_registerRoutines’ , ‘R_useDynamicSymbols’,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42313373/