2016-04-13 33 views
4

私は、次のファイルcumsum_bounded.cppC++の機能は利用できません

#include <Rcpp.h> 
using namespace Rcpp; 

//' Cumulative sum. 
//' @param x numeric vector 
//' @param low lower bound 
//' @param high upper bound 
//' @param res bounded numeric vector 
//' @export 
//' @return bounded numeric vector 
// [[Rcpp::export]] 
NumericVector cumsum_bounded(NumericVector x, double low, double high) { 
    NumericVector res(x.size()); 
    double acc = 0; 
    for (int i=0; i < x.size(); ++i) { 
     acc += x[i]; 
     if (acc < low) acc = low; 
     else if (acc > high) acc = high; 
     res[i] = acc; 
    } 
    return res; 
} 

を持っている私は、&リロードを構築し、私の新しい機能をテスト。

cumsum_bounded(c(1, -2, 3), low = 2, high = 10) 
[1] 1 0 3 

次に、ドキュメントを作成します。 devtools::document()

私がBuild & Reloadになるとすべてが正常にコンパイルされます。

しかし、私はcumsum_bounded(c(1, 2, 3), low= 2, high = 10)を実行すると、私はエラーを取得:

​​3210

名前空間を

# Generated by roxygen2: do not edit by hand 

export(cumsum_bounded) 

更新:

私は上記のように、新しいプロジェクトを作成し、Build & Reloadを使用しない場合関数ではなく、devtools :: loadall()で動作します。しかし、一度そのBuild & Reloadボタンを押すと、横向きになります。

+0

'document()'を実行したときに更新されたファイルはどれですか? – nrussell

+0

'devtools'というタグを追加するとよいでしょう。' Rcpp'自体が文書化されているように動作するためです。そして、我々は 'devtools'について何も言いません(良いか悪いか)。私は 'Rcpp :: compileAttributes()'を実行するだけです(https://cloud.r-project.org/web/packages/Rcpp/vignettes/Rcpp-attributes.pdf)。 –

+0

@DirkEddelbuettel 'Build&Reload'ボタンは' Rcpp :: compileAttributes() 'を実行します。 – jwenzeslaus

答えて

10

あなたはおそらく、あなたのNAMESPACEファイル内の行

useDynLib(<pkg>) ## substitute your package name for <pkg> 

を必要としています。 roxygen2を使用している場合は、たとえば次のような行を追加できます。あなたのドキュメントのどこかに#' @useDynLib <pkg>を置き換え、適切な場合は<pkg>のパッケージ名に置き換えてください。

EDIT:他のエラーメッセージに応じて、Rcppから何かをインポートする必要があります。行@importFrom Rcpp evalCppを追加します。

+0

'cumsum_bounded(c(1,2,3)、low = 1、high = 3)のエラー: 'enterRNGScope'関数が 'Rcpp'パッケージで提供されていません – jwenzeslaus

+0

ありがとうございます。 – jwenzeslaus

+2

これは、a)ドキュメントを読むこと(私が知っている、私が知っている...)、またはb)テンプレートパッケージを作成することによって避けられた基本的なエラーです。 –

関連する問題