【问题标题】:Passing a boolean R vector to C dynamic_bitset将布尔 R 向量传递给 C dynamic_bitset
【发布时间】:2013-07-29 15:50:05
【问题描述】:

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

【问题讨论】:

    标签: c++ r rcpp


    【解决方案1】:

    我会像这样创建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&lt;Rbyte&gt; 并使用块构造函数:

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

    【讨论】:

    • 很好,+1。我在那里扔了一个Rcpp::export 属性,以便它实际上可以从 R 中调用:)
    • 最初我尝试使用BH但显然dynamic_bitset不包括在内,所以没有展示Rcpp::depends(BH)
    • 我们昨天升级了包...但它仍然丢失。你也是 BH 的作者,所以如果你想要它,你可以改变包创建脚本。
    猜你喜欢
    • 2018-05-29
    • 1970-01-01
    • 1970-01-01
    • 2015-01-06
    • 2020-12-26
    • 2011-12-02
    • 2016-10-24
    • 1970-01-01
    • 2010-10-13
    相关资源
    最近更新 更多