0
我正在编写我的包并在加载我的包时收到警告。我用的是Cdqrls
在我的一些代码:.Call(Cdqrls, x[, id1, drop=FALSE] * w, w * z, epsilon)
我还包括一个lm.c
文件中src
文件夹,包括:未能在构建R包时为Cdqrls分配NativeSymbolInfo
...
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中包,以下警告消息出现:
Warning message:
In FUN(1L[[1L]], ...) :
failed to assign NativeSymbolInfo for Cdqrls since Cdqrls is already defined in the ‘My_Package_Name’ namespace
我Google这样的警告消息,但一无所获。所以我有两个具体的问题:
有没有人遇到过这种警告?或者有人可以给我一些关于潜在错误/错误的建议吗?
此警告不会影响我现在运行的代码,但它很烦人。当我的最终用户加载软件包时,有没有办法抑制这个警告信息? (对不起,我知道这应该是可以避免的,但只是好奇:)
更新
又一个音符,可以帮助调试问题:我用
##' @useDynLib My_Pkg_Name Cdqrls
##' @keywords internal
的功能其中使用.Call(...)
。
感谢您的回复!我改变了我的包名称,但它仍然显示加载时的警告...顺便说一句,本机符号是什么? – alittleboy
@alittleboy:“本地符号”是C/C++/Fortran函数的名称。请注意,我不只是添加'PACKAGE'参数,我将'.Call(Cdqrls,...)'改为'.Call(“Cdqrls”,...)'。是你做的吗? –
谢谢!我改为“Cdqrls”,但仍显示消息。目前我在/ src文件夹中有以下文件:'lm.c','lm.o'和'My_Pkg.so',其中'lm.c'是从base R直接获取的。我还尝试将其更改为' PACKAGE =“base”'但仍然无法工作... – alittleboy