柔軟なサイズのARMAベクトルの割り当て - 一般的にTRUEまたはRCPPの財産ですか?
-
21-12-2019 - |
質問
RCPPパッケージを使用して、C ++で書かれた主な比率とRの比率が小さいコードを書き込んでいます。
C ++から知っているものに基づいて、すべてRとは異なり、C ++のすべての変数はUpfrontで宣言され、この宣言にはタイプとサイズの両方が含まれています。例えば、私たちが言うとき:
arma::vec test(2);
.
その後、テストはサイズ2のArmadilloベクトルであると仮定します。これは、テストに異なるサイズのものを割り当てないでください。その右?
これは私の挑戦です:
私のコードでは、さまざまなサイズのベクトル(通常は2より大きい)のベクトルを「テストベクトル」に割り当てると、テストの再宣言なし。私の驚きには、このコードはコンパイルされたエラーなしで完全にうまく機能します!
各反復では、テストする新しいベクトルをどのように割り当てるかが次のとおりです。
test = Rcpp::as<arma::vec>(myList["aVecFromMyList"]);
.
質問:
は、最初はサイズ2のように宣言されているテストにさまざまな長さのベクトルを割り当てることができるというArmadilloです。またはそれはRCPPパッケージ機能ですか?
あなたの助けに感謝します。
解決
type にエンコードするベクトルのサイズを求めています。これを指定すると、arma::vec
型の場合は、任意のサイズのarma::vec
sを受け入れることができます。
タイプ内のサイズ制約を強制したい場合は、arma::vec::fixed<N>
のようなものが必要な場合は、ここではN
が2になります。これは、ベクトルがN
のサイズになるような制約を強制するタイプです。これらの低桁のバージョンのためのTypedeFもあります。サイズ2の固定ベクトルとしてのvec2
あなたはあなたのas
呼び出しを同じように変更する必要があるでしょう。私が信じる - うまくいけば、私はそれをテストしていません。
armadillo docs を読むべきです。Armadillo Docsはおそらく最もクリーンで最も有用なものがあります。