2017-11-07 16 views
0

参照でデータフレームを渡して、列を追加しようとしています。私の計画は、このように行を追加することです。Rcpp:参照によってデータフレームに行を追加します。

私のコードは、これまでは下記sourceCppとエラーなしでコンパイルされた - しかし、私はこのような機能を実行することはできません。

lst <- list("a"=c("aone", "atwo"), "b"=c("bone","btwo")) 
mainFunc(lst) 

これはmainFuncが定義されていないので、私はと思われることを私に伝えますコードは何とか間違っています:

#include <Rcpp.h> 

using namespace Rcpp; 


class C 
{ 
public: 
    void test(Rcpp::DataFrame& df, Rcpp::List y) 
    { 

    int n = y.size(); 
    for(int i = 0; i<n; ++i) 
    { 
     List sublist = y[i]; 
     int m = sublist.size(); 
     for(int j = 0; j<m; ++j) 
     { 
     CharacterVector sublist_element = sublist[j]; 

     df[sublist_element] = sublist_element; 
     } 
    } 

    } 
}; 

// [[Rcpp::export]] 
XPtr<C> mainFunc(Rcpp::List y) 
{ 
    XPtr<C> ptr(new C(), true); 

    DataFrame df; 

    ptr->test(df, y); 
    return(ptr); 
} 

だからmainFuncでそれに値を追加/ mainFuncでデータフレームを作成して追加することが可能でしょうか?

答えて

1

これもこれまでにも回答されていますが、参考にするのは難しいです。本質的には:

  • data.frameあなただけので、あなたは基本的に各ベクトル
  • に挿入してサイズを変更する必要がベクトル
  • のセットを参照してくださいC++レベルでのベクトル
  • のリストですあなたが知っているので、もしあなたが再割り当てする必要があり、コンテンツをコピーして必要な

サイズ変更は高価ですたとえば、挿入する行が10行の場合は1回だけ行います。

+0

ありがとうございました。 'data.frame'の代わりに' List'を使う方が効率的ですか?または私が変換するC++のネイティブ構造ですか?私は最終的なサイズをあらかじめ知っていません:-( – N08

+1

これを行うと(例えばRblpapiを参照)、 'std :: vector'を行単位で大きく変換し、' data.frame'を変換して作成します。 –

+0

私は今、Rblpapiのソースファイルを見ていますが、かなりの数があります。この変換が起きる箇所を教えてください。 – N08

関連する問題