1. 学ぶ
  2. /
  3. コース
  4. /
  5. Rcpp で R コードを最適化する

Connected

演習

STL のベクター

standard template library(stl)は、柔軟なアルゴリズムとデータ構造を含む C++ のライブラリです。たとえば、stl の double ベクターは、Rcpp の NumericVector に相当する「ネイティブ C++」の型です。次のコードは、10 要素の標準的な double ベクター x を作成します。

std::vector<double> x(10);

通常は、mean()、round()、abs() など R と同様に使える便利なメソッドにアクセスできるため、Rcpp のベクター型を使うほうが理にかなっています。しかし、stl のベクターには、毎回データをコピーすることなく動的にサイズを変更できるという利点があります。これにより、前の演習で扱った「bad」関数のような、よりシンプルなコードを書きつつ、「good」コードに匹敵する性能を維持できます。

指示

100 XP
  • 正の数を選び出す、stl ベクター版の関数 select_positive_values_std() の定義を完成させてください。
    • 関数の戻り値の型を、std::vector<double> を用いた標準の double ベクターに設定します。
    • サイズが 0 の標準 double ベクター positive_x を定義します。
    • for ループ内の if ブロックで、positive_x の push_back() を使って、x の i 番目の要素を追加します。
  • 比較用に、前の演習の good_select_positive_values_cpp() がワークスペースに用意されています。コンソール出力を確認して、2 つの関数の相対的な速度を見てみましょう。