标题显示时出现错误
Error: object 'Cdqrls' not found
我使用devtools
构建R包,并使用当前包中的一个函数
.Call(Cdqrls, x[, id1, drop=FALSE] * w, w * z, epsilon)
并在lm.c
文件夹中包含src
文件,其中包括:
...
SEXP Cdqrls(SEXP x, SEXP y, SEXP tol)
{
SEXP ans, ansnames;
SEXP qr, coefficients, residuals, effects, pivot, qraux;
int n, ny = 0, p, rank, nprotect = 4, pivoted = 0;
double rtol = asReal(tol), *work;
...
直接从R源文件复制。当我在load_all()
中使用devtools
时,它会使用新文件编译src /中的共享对象(我检查它运行良好):lm.o
和MyPkgName.so
。但是,从devtools
的wiki中,我发现了
load_all ignores the package NAMESPACE
如果工作正常,我认为通过运行某些功能,我可以更新 NAMESPACE
文件以包含useDynLib(MyPkgName, Cdqrls)
。那是对的吗?我认为以这种方式错误可能会消失......任何建议都非常感谢!
更新
根据@mnel和this帖子,似乎使用@useDynLib
应该有效。但是,我使用.Call()
的函数没有记录,并且有几个函数使用.Call
所以我个人不想记录它们,因为它们不用于最终用户。那么,我应该把@useDynLib
放在哪里?
答案 0 :(得分:1)
答案是使用roxygen2使用@useDynLib PkgName Routine1 Routine2
,这样一旦在document()
中运行devtools
函数,NAMESPACE文件将包含useDynLib(PkgName,Routine1,Routine2)
,这将完美地运行。