在构建R包时,无法为Cdqrls分配NativeSymbolInfo

时间:2013-10-09 03:58:46

标签: r package

我正在编写我的包,并在加载我的包时收到警告。我在我的一些代码中使用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搜索了这条警告信息但没有得到任何结果......所以我有两个具体的问题:

  1. 之前有没有人遇到过这样的警告?或者有人可以就潜在的错误/错误给我一些建议吗?

  2. 此警告不会影响我现在运行的代码,但这非常令人讨厌。当我的最终用户加载包时,有没有办法抑制此警告消息? (对不起,我知道这应该避免,但只是好奇:)

  3. 更新

    可能有助于调试问题的另一个注释:我使用

    ##'  @useDynLib My_Pkg_Name Cdqrls
    ##'  @keywords internal
    

    表示使用.Call(...)的函数。

1 个答案:

答案 0 :(得分:1)

我相信这意味着您的包命名空间中有一个名为Cdqrls 的对象,它是本机符号的名称。

解决此问题的方法是将.Call更改为:

.Call("Cdqrls", x[,id1,drop=FALSE]*w, w*z, epsilon, PACKAGE="My_Package_Name")

或者您可以更改本机符号或其他对象。