0

如标题所示,我收到错误

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_ 但是,从 wiki 中,我发现lm.oMyPkgName.sodevtools

load_all ignores the package NAMESPACE

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

更新

根据@mnel 和这篇文章,似乎 using@useDynLib应该有效。但是,我使用的函数.Call()没有记录,并且使用了几个函数,.Call所以我个人不想记录它们,因为它们不用于最终用户。因此,我应该放在@useDynLib哪里?

4

1 回答 1

1

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

于 2013-04-09T02:47:12.187 回答