0

我正在写我的包并在加载我的包时收到警告。我在我的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

我用谷歌搜索了这条警告信息,但什么也没得到……所以我有两个具体问题:

  1. 有没有人经历过这样的警告?或者有人可以给我一些关于潜在错误/错误的建议吗?

  2. 这个警告不会影响我现在运行的代码,但它很烦人。当我的最终用户加载软件包时,有没有办法抑制此警告消息?(对不起,我知道应该避免这种情况,但只是好奇:)

更新

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

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

对于使用的功能.Call(...)

4

1 回答 1

1

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

一种解决方法是将您更改.Call为:

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

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

于 2013-10-09T14:34:24.193 回答