使用devtools构建R包时找不到对象'Cdqrls'

时间:2013-04-09 00:33:02

标签: r package devtools

标题显示时出现错误

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.oMyPkgName.so。但是,从devtools的wiki中,我发现了

load_all ignores the package NAMESPACE

如果工作正常,我认为通过运行某些功能,我可以更新 NAMESPACE文件以包含useDynLib(MyPkgName, Cdqrls)。那是对的吗?我认为以这种方式错误可能会消失......任何建议都非常感谢!

更新

根据@mnel和this帖子,似乎使用@useDynLib应该有效。但是,我使用.Call()的函数没有记录,并且有几个函数使用.Call所以我个人不想记录它们,因为它们不用于最终用户。那么,我应该把@useDynLib放在哪里?

1 个答案:

答案 0 :(得分:1)

答案是使用roxygen2使用@useDynLib PkgName Routine1 Routine2,这样一旦在document()中运行devtools函数,NAMESPACE文件将包含useDynLib(PkgName,Routine1,Routine2),这将完美地运行。