【发布时间】:2013-04-09 00:33:01
【问题描述】:
如标题所示,出现错误
Error: object 'Cdqrls' not found
我使用devtools 构建 R 包,我使用了当前包中的一个函数
.Call(Cdqrls, x[, id1, drop=FALSE] * w, w * z, epsilon)
并且还在src文件夹中包含一个lm.c文件,其中包括:
...
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 源文件复制。当我在devtools 中使用load_all() 时,它用新文件lm.o 和MyPkgName.so 编译src/ 中的共享对象(我检查过它运行良好)。但是,从devtools的wiki,我发现
load_all ignores the package NAMESPACE
如果工作正常,我想通过运行一些函数,我可以更新 NAMESPACE 文件以包含useDynLib(MyPkgName, Cdqrls)。那是对的吗?我认为这样错误可能会消失......任何建议都非常感谢!
更新
根据@mnel 和this 的帖子,似乎使用@useDynLib 应该可以工作。但是,我使用的函数 .Call() 没有记录,并且有几个函数使用了 .Call,所以我个人不想记录它们,因为它们不用于最终用户。因此,我应该把@useDynLib放在哪里?
【问题讨论】:
-
您是否使用
roxygen来创建您的包?如果是这样stackoverflow.com/questions/8407615/… -
@mnel:谢谢!我正在使用roxygen2。我阅读了您提到的帖子,似乎@useDynLib 是可以使用的。请参阅上面的更新帖子;-)
-
@mnel:顺便说一句,我应该使用@useDynLib Cdqrls 吗?谢谢!
-
更有可能是
@useDynLib yourpackagename,或者@useDynLib stats,如果你想使用stats包中的Cdqrls.... -
@mnel:谢谢!我使用了@useDynLib pkgname Cdqrls,它现在可以工作了;-)