3

私は Rcpp から始めて、Hadley の本/こちらのページを読んでいます。これらの基本は私にとって十分すぎると思います.

C++ を使用して任意の R オブジェクトに属性を割り当てるにはどうすればよいですか?

例えば:

// [[Rcpp::export]]
NumericVector attribs(CharacterVector x,NumericVector y) {
    NumericVector out = y;
    out.attr("my-attr") = x;

    return out;
}

C++で型を指定する必要があることは理解していますが、渡すRオブジェクトに属性を割り当てる方法があるかどうかはまだ疑問です... C++settatrでのdata.table動作でそれを見てきましたが、要素でのみ動作するようですクラスdata.tableの。Rモード/クラスごとに追加の関数を書く以外に方法はありますか?

編集: 最終的な目的は、リストの各要素への属性の割り当てを高速化することです。以前ここで議論しましたが、これまでのところ Rcpp は関係ありませんでした (他のパッケージを介して使用することを除いて)。

4

2 に答える 2

0

私の熱意を許してください: Rcpp がまったくの初心者がそのようなコードを高速化するのにどのように役立つかは、単に驚くべきことです!

ハドリーの答えは質問を完全にカバーしていますが、それが私が試してみた理由です。ここで与えられた入力を、できるだけ早くオブジェクトのリストに属性を追加するというより具体的なケースの解決策に変えようとしました。

私のコードはおそらく完璧には程遠いですが、data.table's setattr. これはおそらく、代入だけでなくループも C++ に任せたことが原因だと思います。

例とベンチマークは次のとおりです。

#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
RObject fx(List x, CharacterVector y){

  int n = x.size();
  NumericVector new_el;  

   for(int i=0; i<n; i++) {
    new_el = x[i];
    new_el.attr("testkey") = y;
    x[i] = new_el;
    }
  return(x);
 }

ここに画像の説明を入力

于 2013-09-29T13:43:10.513 に答える