2017-02-08 7 views
1

このウェブサイトまたはDirk、Hadleyまたは他の人が公表した注意事項に関するこれまでの説明に従いました。しかし、私はまだcpp11プラグインに関する問題のために私のパッケージを構築する際に問題があります。Building R RcppArmadillo、RcppEigenを使用し、Cpp11プラグインに依存するパッケージ

RcppArmadillo.package.skeleton()機能を使用しました。私は自分のcppファイルをsrcディレクトリに置いています。 NAMESPACEファイルは、importFrom(Rcpp, sourceCpp)行を含むはずです。私もDESCRIPTIONファイルを編集しました。LinkingToセクションでは、RcppEigenと私が使用する他のパッケージを追加しました。私は最終的にRでcompileAttributes(verbose=TRUE)関数を実行し、すべてが正常に見えました。それゆえ、私は、私が必要なすべてをやったと思う。私はまた、sourceCpp()を使用してRでコードをコンパイルすると、完璧に動作し、エラーなしでコンパイルされることにも言及する必要があります。 より良い私の依存関係が何であるかを説明するために、私はここに私のコードの最初のブロックを置く:

#include <RcppArmadillo.h> 
    #include <RcppNumerical.h> 
    #include <RcppArmadilloExtensions/sample.h> 
    #include <Eigen/LU> 
    #include <algorithm> 

    // [[Rcpp::depends(RcppArmadillo)]] 
    // [[Rcpp::depends(RcppEigen)]] 
    // [[Rcpp::depends(RcppNumerical)]] 
    // [[Rcpp::plugins(cpp11)]] 

問題がある、私は私のパッケージを構築し、私はラインのためのエラーと警告を得るとき、私はに関しautoタイプを持っていますcpp11プラグイン。

このウェブサイト上で同様の記事を検索した後、私は++、11 Cを使用するために私のRコンパイラを強制しなければならないと結論付けたと私は私のMakvarsファイルが~/.R/Makevarsに位置し、私はMACを使用するので、私は、この行を追加したが、編集FOREそのファイルに CXX=clang++ -std=c++11。しかし、私がそうすると、3つのエラーは消えてしまいますが、mat、uvecなどのすべてのArmadillo変数タイプは認識されなくなるため、50の新しいエラーが生成されます。だから私はこれを修正する方法を知らない。

基本的には// [[Rcpp::plugins(cpp11)]]を入れてください.Rcppの新しいバージョンがこのプラグインをサポートしているので、おそらくその理由は私がsourceCppをRで実行したときにエラーがなく、すべて正常です。しかし、パッケージを作るときに何が起こるのか分かりません。私のRcppのバージョンは0.12.8です。 ご協力いただきありがとうございます。

答えて

2

依存関係(つまり、他のヘッダー)とコンパイラオプションの両方のプラグインは、sourceCpp()によって使用されます。

パッケージは、C++ 11ディレクティブ、src/MakevarsまたはSystemRequirementsのいずれかのために、LinkingTo:でこれを行うと。これについては、Writing R Extensionsを参照してください。

+0

ありがとうございました。あなたの答えに続いて、Cに関するWriting R Extensionsの[この部分](https://cran.r-project.org/doc/manuals/r-release/R-exts.html#Using-C_002b_002b11-code) + 11を追加し、 'src/Makevars'ファイルに1行追加しました。しかし、「アルマジロ」機能が認識されないという問題は依然として残っています! 'RcppArmadillo'と' C++ 11'は互換性がないのでしょうか? –

+0

'LinkingTo'を探して、同じマニュアルを読んでください。 ** documented **関数 'RcppArmadillo.package.skeleton()'を使用して** working **パッケージを作成し、あなたの試みが不足している場所を把握してください。 –

+0

ダーク、私はついにこの問題を解決できました! 'RcppArmadillo.package.skeleton()'を実行してパッケージをテストパッケージと比較することで、最終的に見つけることができます。その理由は、私が 'using namespace arma'をコードの冒頭に使用し、Armadilloの型を使う前に' arma :: 'を使わないということでした。エラーは 'RcppExports.cpp'ファイルで生成されましたが、' using namespace arma'はありませんでした。私は自分自身でその行を追加し、問題を修正しました。しかし、そこには「手で編集しないでください」と書かれています。とにかくラインが自動的に追加されますか?手作業による編集は問題を引き起こしますか? –

関連する問題