将布尔R向量传递给C dynamic_bitset

时间:2013-07-29 15:50:05

标签: c++ r rcpp

将布尔R矢量传递给C ++ dynamic_bitset向量的最佳方法是什么?有没有办法使用指针和向量长度来构造一个dynamic_bitset对象,就像矢量类一样?你会推荐使用Rcpp吗?
谢谢你的帮助和时间......

1 个答案:

答案 0 :(得分: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());
}