問題タブ [rcpp]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - R パッケージでの C++ ライブラリの使用
R で C++ ライブラリを利用する最良の方法は何ですか。できれば C++ データ構造を保持します。私は C++ のユーザーではないので、利用可能なアプローチの相対的なメリットについては明確ではありません。R-ext のマニュアルでは、すべての C++ 関数を C でラップすることを提案しているようです。ただし、C++ を組み込む他の手段が少なくとも 4 つまたは 5 つ存在します。
Rcpp (多作のオーバーフロー者 Dirk Eddelbuettel によって維持されている) と RcppTemplate パッケージ (両方とも CRAN 上) の 2 つの方法は、似た系統のパッケージですが、2 つの違いは何ですか?
R forge で利用可能な別のパッケージ rcppbind は、C++ と R をバインドするために異なるアプローチを取ると主張しています (私にはわかりません)。
CRAN で利用可能なパッケージ inline は、インライン C/C++ を許可すると主張しています。コードを R でインライン化できることを除けば、これが組み込み機能と異なるかどうかはわかりません。
そして最後に RSwig が登場しましたが、作者のページが何年も更新されていないため、どの程度サポートされているかは不明です。
私の質問は、これらの異なるアプローチの相対的なメリットは何かということです。どちらが最も移植性が高く堅牢で、最も実装が簡単です。CRAN でパッケージを配布することを計画している場合、どの方法を使用しますか?
performance - R でループ操作を高速化する
R でパフォーマンスに大きな問題がありdata.frame
ます。オブジェクトを反復処理する関数を作成しました。単に新しい列を a に追加し、data.frame
何かを蓄積します。(簡単な操作)。にdata.frame
は約 85 万行あります。私の PC はまだ動作しており (現在約 10 時間)、実行時間についてはわかりません。
この操作を高速化する方法はありますか?
r - Rcppでベクトルのリストを作成するにはどうすればよいですか?
私はRcppモジュールを書いていますが、RcppResultSetリストの1つの要素として、要素がベクトルであるリストを返したいと思います。たとえば、.Call("myfunc")$foo
次のようになります。
(正確な数はここでは重要ではありません)。問題は、これを行う正しいRcppの方法がわからないことです。を渡してみましたvector<vector<int> >
が、これは最初のベクトルの長さを幅として黙って(行列が不規則であっても)行列を作成します。構築しようとしましたが、さまざまなオブジェクト(など)をsに安全にRcppList
キャストするのに苦労しました。RcppVector
SEXP
Rcppのベクトルのリストなど、複雑な構造を処理するためのベストプラクティスに関するヒントはありますか?
c++ - Rcppに新しいモジュールを見つけさせる方法は?
新しい Rcpp モジュールのコンパイルに成功した後 (「Rcpp モジュールを使用した C++ 関数とクラスの公開、Dirk Eddelbuettel Romain Francois」の例)
紙の指示に従って、
R はエラーについて不平を言いました:
「Module( "yada" )」を呼び出す前に「dyn.load("/path/to/yada.dll")」を入れてみましたが、それでも同じエラーです。
Rcpp のモジュールに関するオンラインの情報はほとんどありません。問題を解決する方法を知っていますか?コンパイルしたモジュール dll を特定のフォルダーに配置する必要がありますか?
サンプルコード:
r - インラインRcppを使用してグローバル環境から変数を読み取りますか?
RcppのイントロVignetteの例に従って、インラインで試してみました。
しかし、コンパイルエラーが発生します。
何が問題で、これを修正する方法はありますか?これは単なるおもちゃの例です。これに対する答えによっては、もっと重要な複雑な問題があります。
gcc - R inline を使用した別のパッケージへのリンク
乱数ジェネレーターにアクセスするには、コンパイルして pomp パッケージにリンクする必要がある C++/Rcpp 関数があります。ヘッダー ファイルをインクルードすることはできますが、コンパイルされたコードにリンクするにはどうすればよいですか?
コードは pomp パッケージの reulermultinom 関数を使用しており、評価するとエラーが発生します
`reulermultinom(int, double, double*, double, double*) への未定義参照
発行されるコマンドは、
g++ -I"C:/PROGRA~1/R/R-211~1.1/include" -I"C:/PROGRA~1/R/R-211~1.1/library/Rcpp/include" -O2 -Wall - c file2f752742.cpp -o file2f752742.o g++ -shared -s -static-libgcc -o file2f752742.dll tmp.def file2f752742.o C:/PROGRA~1/R/R-211~1.1/library/Rcpp/lib/ libRcpp.a -LC:/PROGRA~1/R/R-211~1.1/bin -lR
-lpomp などがあるはずです。
r - 遅いR関数を高速化するためのCコードの記述方法はどこで学ぶことができますか?
Rで使用するCコードの記述方法を学ぶための最良のリソースは何ですか?R拡張機能のシステムと外国語インターフェースのセクションについては知っていますが、かなり難しいと思います。Rで使用するCコードを作成するための優れたリソース(オンラインとオフラインの両方)は何ですか?
明確にするために、Cコードの記述方法を学びたくはありません。RとCをより適切に統合する方法を学びたいと思います。たとえば、C整数ベクトルからR整数ベクトルに(またはその逆に)変換するにはどうすればよいですか。またはCスカラーからRベクトルへ?
c++ - C++ コードが統合されたパッケージ開発のための IDE / セットアップ
重い計算タスク用の R の拡張として C++/Rcpp を把握しようとしています。最終的に、これらの C++ ライブラリはパッケージに統合する必要があるため、簡単に作業できるセットアップ/ツールの組み合わせ/IDE を探しています。好みに大きく左右されることは承知していますが、選択する前に選択肢を知っておくとよいでしょう。
では、C++ ライブラリを使用して R パッケージを開発する場合、どのようなセットアップを使用しますか?
- R と C++ に同じエディター/IDE を使用していますか?
- 取得することが重要な追加のツール (Rtools 以外) はありますか?
- プロセスを大幅に把握またはスピードアップするために重要な一般的なセットアップの微調整はありますか?
この質問が以前に尋ねられた場合は申し訳ありません。R 用のすべてのエディターのリストを見つけましたが、C++ コードを含むパッケージの開発に特に向けられたものは何もありませんでした。ヒントやヒントは本当にありがたいです。
編集:プラットフォームはWindowsですが、問題なくLinuxに移行できます(デュアルブート、ubuntuを使用できないのは、古いカードと古い画面の組み合わせに適したドライバーがないことだけです)
c++ - UNIX で g++ コンパイラを使用して C++ コードから R および RInside ライブラリにリンクすると、未定義の参照エラーが発生する
R を C++ プログラムに組み込みたい。そこで、R、Rcpp、RInside もインストールしました。しかし、UNIX で g++ を使用してコンパイルしているときに、多くの「未定義参照」エラーが発生します。コンパイルのために私が与えるコマンドは
g++ -I/path/to/R/include -I/path/to/Rcpp/include -I/path/to/RInside/include -L/path/to/R/libs -L/path/to/Rcpp/ libs -L/path/to/RInside/libs test.cpp -lRlapack -lRcpp -lRblas -lRInside"
test.cpp:
エラー:
R 変数に対して同様の 110 の未定義エラーが発生します。R およびその他のパッケージをデフォルトの場所ではなく、自分の場所にインストールしました。このエラーで 2 日間立ち往生しています。リンクなど、すべてを正しく行っているようです。よろしくお願いします。
r - Rcpp を使用した R 上のレモン グラフ ライブラリ
この答えは、いくつかのことが関係しているため、少し複雑だと思います。
特にグラフ(ネットワーク)を使用して、Rで高性能な計算を行いたいです。Rパッケージとしてigraphはとてもいいです。しかし、R は遅いので、計算コストの高いルーチンを C++ (おそらく C) でコーディングしたいと考えています。igraph C ライブラリを調べてみたところ、扱いが少し面倒であることがわかりました。また、 Boost Graph Libraryを調べて、習得が難しいという記事を読みました。それで、最終的にレモングラフライブラリを見つけました。これは C++ で書かれており、とても使いやすそうです。
そこで、公式ページで推奨されているように、Lemon Graph Library をインストールしました。次に、Rcppとinlineパッケージを使用して、R から Lemon Graph C++ コードを実行するように管理します。しかし、基本的に私はこれを置く:
myexample_inline.R ファイルで、R コンソールを実行して次のように記述します。
だからそれは動作します!!! しかし今、私は次の問題を抱えています。たとえば、レモングラフオブジェクトのプロパティを計算するC++関数(double func1(g)など)を作成するとします。インライン コードからその関数を呼び出すにはどうすればよいですか? func1() をテンプレート関数として作成し、cxxfunction() のインクルード フィールドに配置する必要がありますか?
基本的に: R にインライン化された別の C++ 関数から、R にインライン化された C++ 関数を呼び出す方法がわかりません。それは可能ですか? インライン コードを使用しない別の方法はありますか?
Rcppモジュールを使用してそれを行うことができるかもしれませんが、これを行う方法を(まだ)理解できませんでした。モジュールの動作に問題があります。引き続き挑戦していきますが、ここから何かヒントが得られるかもしれません。
また、(私の最初の) パッケージを開発する可能性についても考えました。しかし、Lemon Graph C++ コードがこの方法でヘッダーを呼び出すという問題がありました (たとえば)。
つまり、Lemon Graph Library のインストールは避けられないということです (少なくとも私はそう信じています)。Lemon Graph Library の R パッケージを作成したい場合は、すべてのコードをもう一度「書き直す」必要があります!!! したがって、これは私の主なオプションではありません。
よろしくお願いします