【发布时间】:2013-07-29 15:50:05
【问题描述】:
将布尔值的 R 向量传递给 C++ dynamic_bitset 向量的最佳方法是什么?有没有办法像矢量类一样使用指针和矢量长度来构造 dynamic_bitset 对象?你会推荐使用 Rcpp 吗?
感谢您的帮助和时间...
【问题讨论】:
将布尔值的 R 向量传递给 C++ dynamic_bitset 向量的最佳方法是什么?有没有办法像矢量类一样使用指针和矢量长度来构造 dynamic_bitset 对象?你会推荐使用 Rcpp 吗?
感谢您的帮助和时间...
【问题讨论】:
我会像这样创建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());
}
【讨论】:
Rcpp::export 属性,以便它实际上可以从 R 中调用:)
BH但显然dynamic_bitset不包括在内,所以没有展示Rcpp::depends(BH)