我正在编写我的包,并在加载我的包时收到警告。我在我的一些代码中使用Cdqrls
:.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中安装我的软件包时,会出现以下警告消息:
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(...)
的函数。
答案 0 :(得分:1)
我相信这意味着您的包命名空间中有一个名为Cdqrls
和的对象,它是本机符号的名称。
解决此问题的方法是将.Call
更改为:
.Call("Cdqrls", x[,id1,drop=FALSE]*w, w*z, epsilon, PACKAGE="My_Package_Name")
或者您可以更改本机符号或其他对象。