2013-07-29 16 views
5

將布爾的R向量傳遞給C++ dynamic_bitset向量的最佳方法是什麼?有沒有辦法使用指針和矢量長度來構造一個dynamic_bitset對象,這對於矢量類是可能的?你會推薦使用Rcpp嗎?
感謝您的幫助和時間......將布爾R向量傳遞給C dynamic_bitset

回答

2

我只想創造dynamic_bitset這樣的:

#include <Rcpp.h> 
#include <boost/dynamic_bitset.hpp> 

using namespace Rcpp ; 

// [[Rcpp::export]] 
void create_dynamic_bitset(LogicalVector x){ 
    int n = x.size() ; 
    boost::dynamic_bitset<> bs(n); 
    for(int i=0; i<n; i++) bs[i] = x[i] ; 

    // do something with the bitset 
    for (boost::dynamic_bitset<>::size_type i = 0; i < x.size(); ++i) 
     Rcout << x[i]; 
    Rcout << "\n"; 

} 

內部,R邏輯載體只是int陣列。所以沒有更直接的方法來構建dynamic_bitset,你的迭代。

另外,請注意輸入LogicalVector中缺失的值。

或者,也可能具有存儲爲原始矢量(RCPP類RawVector)所述輸入數據,使用一個dynamic_bitset<Rbyte>和使用塊構造:

void create_dynamic_bitset(RawVector x){ 
    boost::dynamic_bitset<Rbyte> bs(x.begin(), x.end()); 
} 
+1

尼斯和1。我在裏面扔了一個'Rcpp :: export'屬性,以便它實際上可以從R中調用:) –

+0

最初我嘗試使用'BH',但顯然'dynamic_bitset'不包括在內,所以沒有展示Rcpp :: depends (BH)' –

+0

昨天我們升級了軟件包......但它仍然缺失。你也是BH的作者,所以如果你想在那裏,你可以改變包創建腳本。 –