質問

どのように使用したC++図書館Rその保全にC++のデータ構造です。私はC++ユーザーだけではないの相対的なメリットで利用するアプローチ。R-extマニュアルか包装のC++の機能C.しかし、少なくともはやはりその他の手段を取り入れC++が存在します。

についてはパッケージw/同系統のRcpp(維持し、多数のoverflower Dirk Eddelbuettel)RcppTemplateパッケージ(CRAN、何の違いない。

他のパッケージには、rcppbind、Rを主張するなどとは全く異なるアプローチを結合C++R(い知識を伝え).

このパッケージインラインの利用CRAN、請求めのインラインC/C++くなったことは異なり、内蔵機能別のコードするインラインw/R.

最RSwigが発表されることになります 野生の もしか対応では、 著者ページ ていない更新されています。

私の質問は、どのように相対的なメリットはこれらの異なるアプローチ。の携帯型、堅牢なるのが最も簡単に類するものをいいます。また計画を配布パッケージCRANの方法をお使いになりますか?

役に立ちましたか?

解決

まず、免責事項:使ってい Rcpp ます。これらを実現していくには有名前が変更になった時からRcpp)RcppTemplateして孤児となく更新のための二年に開始していますの維持の下で、その初期の名Rcpp(ることが必要不可欠となっていたのに寄与して参りました RQuantLib).た約一年前、私はカップルの増分の変更がきっと見つかるはずで記録されChangeLog.

今RcppTemplateも最近した後、全三十五ヶ月ずに更新または修正.で興味深い新しいコードで表示されないとの後方互換性がないので、使って使用されてRcpp.

Rcppbind ませんでした非常に積極的に維持されるときに確認します。私は東京または分子を鋳型としたスパッケージと呼ばれ rabstraction.

インライン 何か全く異なる:すべてのコンパイル/リンクサイクルによる埋め込み'プログラムとしてのRる文字列を取得しを作成し、リンクは、みなされます。私たOlegについてはインライン支援Rcppるといいですね。

Swig も興味深い。ジョー王がんばったりに包まれたすべてのQuantLib Rしかし最終試みでなくなったように変化R internals.別の誰かがSwigチームは、ジョーがいます。の目標は扉が大きい図書館。このプロジェクトがもう復活ですがな技術課題です。

別の言及があります。 RInside をRcppき込Rの内部にサポートします。

ようにされている Rcpp もう、萌芽的プロジェクトだけを追加したい機能があります。での使いやすさ、などができます。'非表示一部の炉内構造物にはない楽しいものです。たんのユーザー名また、オフをメールにて差し上げます。でいくことです。

私の"Intro HPCとR'のチュートリアル一例Rcpp,RInsideおよびインライン.

編集: でを振り返ってみたいと思い具体的な例からのHPC R紹介'スライドは借りてからスティーブンMilborrow人からVenables、プールサイドバー、バー/ラウン).では、タスクを列挙すべての可能な組み合わせの決定要因の2x2マトリクスを含むからコミュニケーションを桁の各位置にします。することができなvectorised方法としてのチュートリアルのスライド)による力として

#include <Rcpp.h>

RcppExport SEXP dd_rcpp(SEXP v) {
  SEXP  rl = R_NilValue;        // Use this when there is nothing to be returned.
  char* exceptionMesg = NULL;   // msg var in case of error

  try {
    RcppVector<int> vec(v);     // vec parameter viewed as vector of ints
    int n = vec.size(), i = 0;
    if (n != 10000) 
       throw std::length_error("Wrong vector size");
    for (int a = 0; a < 9; a++)
      for (int b = 0; b < 9; b++)
        for (int c = 0; c < 9; c++)
          for (int d = 0; d < 9; d++)
            vec(i++) = a*b - c*d;

    RcppResultSet rs;           // Build result set to be returned as list to R
    rs.add("vec", vec);         // vec as named element with name 'vec'
    rl = rs.getReturnList();    // Get the list to be returned to R.
  } catch(std::exception& ex) {
    exceptionMesg = copyMessageToR(ex.what());
  } catch(...) {
    exceptionMesg = copyMessageToR("unknown reason");
  }

  if (exceptionMesg != NULL) 
     Rf_error(exceptionMesg);

  return rl;
}

保存されることとしてい dd.rcpp.cpp してい Rcpp を設置し、それを使用

PKG_CPPFLAGS=`Rscript -e 'Rcpp:::CxxFlags()'`  \
    PKG_LIBS=`Rscript -e 'Rcpp:::LdFlags()'`  \
    R CMD SHLIB dd.rcpp.cpp

の構築を意図しています。を使用していま Rscriptr)へのお願い Rcpp 約そのヘッダの図書館です。次に、できる負荷を上げることをRとして

dyn.load("dd.rcpp.so")

dd.rcpp <- function() {
    x <- integer(10000)
    res <- .Call("dd_rcpp", x)
    tabulate(res$vec)
}

同じように送ることができベクトルmatrics,...各種RとC++データの種類を期待する。武器agiは、dexで下がらないboxerぐ幾分強含んでいる。

編集2(一五年後):

この答えだっupvoteが湧き上がってきたので私のキューに挿入しますA 多く 時間経過以降に書いたので、Rcpp頂いてい 多く 豊かな特徴です。私は非常に素早く書いたこ

#include <Rcpp.h>

// [[Rcpp::export]]
Rcpp::IntegerVector dd2(Rcpp::IntegerVector vec) {
    int n = vec.size(), i = 0;
    if (n != 10000) 
        throw std::length_error("Wrong vector size");
    for (int a = 0; a < 9; a++)
        for (int b = 0; b < 9; b++)
            for (int c = 0; c < 9; c++)
                for (int d = 0; d < 9; d++)
                    vec(i++) = a*b - c*d;
    return vec;
}

/*** R
x <- integer(10000)
tabulate( dd2(x) )
*/

使用できるとして、次のコードファイル /tmp/dd.cpp

R> Rcpp::sourceCpp("/tmp/dd.cpp")    # on from any other file and path

R> x <- integer(10000)

R> tabulate( dd2(x) )
 [1]  87 132 105 155  93 158  91 161  72 104  45 147  41  96
[15]  72 120  36  90  32  87  67  42  26 120  41  36  27  75
[29]  20  62  16  69  19  28  49  45  12  18  11  57  14  48
[43]  10  18   7  12   6  46  23  10   4  10   4   6   3  38
[57]   2   4   2   3   2   2   1  17
R> 

一部の違い:

  • 簡単な構築:だけで sourceCpp() ま;でも実Rコード試験の終了
  • 本格的な IntegerVector タイプ
  • 例外を扱うラッパーを自動的に追加 sourceCpp() コード発生装置
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top