現在、.cpp
を使用してコンパイルできるファイルがありますsourceCpp()
。期待どおり、対応する R 関数が作成され、コードは期待どおりに機能します。
ここにあります:
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
NumericVector exampleOne(NumericVector vectorOne, NumericVector vectorTwo){
NumericVector outputVector = vectorOne + vectorTwo;
return outputVector;
}
現在、プロジェクトを を使用してパッケージに変換していますRcpp
。そこで、rStudio でスケルトンを作成し、変換する方法を検討し始めました。
Cpp に関するHadley の優れた入門書の中で、彼はセクション「Using Rcpp in a Package」で次のように述べています。
パッケージが Rcpp::export 属性を使用している場合、パッケージ ビルド プロセスで 1 つの追加手順が必要になります。compileAttributes 関数は、パッケージ内のソース ファイルをスキャンして Rcpp::export 属性を探し、関数を R にエクスポートするために必要なコードを生成します。
関数が追加、削除、または署名が変更されたときはいつでも、compileAttributes を再実行する必要があります。RStudio または devtools を使用してパッケージをビルドする場合、この手順は自動的に行われることに注意してください。
したがって、でコンパイルされたコードsourceCpp()
は、パッケージ内とほぼ同じように機能するはずです。
対応する R ファイルを作成しました。
exampleOne <- function(vectorOne, vectorTwo){
outToR <- .Call("exampleOne", vectorOne, vectorTwo, PACKAGE ="testPackage")
outToR
}
次に、パッケージを (再) ビルドすると、次のエラーが発生します。
Error in .Call("exampleOne", vectorOne, vectorTwo, PACKAGE = "voteR") :
C symbol name "exampleOne" not in DLL for package "testPackage"
sourceCpp() でコンパイルしてパッケージで使用するコードを取得するときに他に何をする必要があるかについて、誰かが考えを持っていますか?
「Rcpp を使用するパッケージの作成」 http://cran.rstudio.com/web/packages/Rcpp/vignettes/Rcpp-package.pdfを読み、そこに示されている基本構造を理解していることに注意してください。ただし、RcppExamples
ソース コードを確認すると、ビネットの構造はサンプル パッケージで使用されているものとまったく同じではないようです。たとえば、使用される .h ファイルはありません。また、ビネットもソース コードも [[Rcpp::export]] 属性を使用しません。これにより、エラーがどこにあるかを正確に追跡することが難しくなります。