0

タイトル通りのエラーが出ました

Error: object 'Cdqrls' not found

私はdevtoolsRパッケージの構築に使用し、現在のパッケージの1つの関数を使用しました

.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 ソース ファイルから直接コピーします。で使用load_all()するとdevtools、src/ の共有オブジェクトがコンパイルされ (うまく動作することを確認しました)、新しいファイル:lm.oMyPkgName.so. しかし、のwikiからdevtools、私はそれを見つけました

load_all ignores the package NAMESPACE

正常に動作している場合、いくつかの機能を実行することで、ファイルを更新して. あれは正しいですか?そうすればエラーが消えると思います...どんな提案でも大歓迎です!NAMESPACEuseDynLib(MyPkgName, Cdqrls)

アップデート

@mnelとこの投稿によると、使用@useDynLibするとうまくいくようです。ただし、私が使用した機能は文書化されておらず、使用した.Call()機能がいくつかある.Callため、エンドユーザーには使用されないため、個人的には文書化したくありません。では、どこに置こ@useDynLibうか?

4

1 に答える 1

1

答えは、@useDynLib PkgName Routine1 Routine2roxygen2を使用することです。これにより、NAMESPACE ファイルdocument()で関数を実行すると、完全に機能する が含まれます。devtoolsuseDynLib(PkgName,Routine1,Routine2)

于 2013-04-09T02:47:12.187 に答える