2013-07-29 16 views
5

Boole'lerin bir R vektörünü bir C++ dynamic_bitset vektörüne iletmenin en iyi yolu nedir? Vektör sınıfı için mümkün olabileceği gibi bir dynamic_bitset nesnesi oluşturmak için bir işaretçi ve vektör uzunluğunun kullanılması için bir yol var mı? Rcpp'yi kullanmanızı tavsiye eder misiniz? Sadece bu gibi dynamic_bitset yaratacakBoolean R vektörünü C dynamic_bitset'e geçirme

cevap

2

Yardımlarınız ve zaman için
Teşekkürler ...:

#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"; 

} 

Dahili olarak, R mantıksal vektörler sadece int dizilerdir. Dolayısıyla, dynamic_bitset'u oluşturmanın daha doğrudan bir yolu yoktur, , yinelemek için. Ayrıca, LogicalVector numaralı girişinizdeki eksik değerleri de kaçırmayın.

Alternatif olarak, bir ham vektör (Rcpp sınıfı RawVector) halinde depolanan giriş verileri bir dynamic_bitset<Rbyte> kullanımı ve blok kurucu kullanabilir:

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

güzel ve +1. Ben bir Rcpp :: export' özniteliğini fırlattım, bu yüzden aslında R :) –

+0

dan callable olduğunu Ben başlangıçta 'BH'but kullanmayı denedim görünüşe göre' dynamic_bitset 'dahil değildir, bu yüzden hiçbir vitrin 'Rcpp :: bağlıdır (BH) ' –

+0

Dün paketi düzelttik ... ama hala kayıp. Siz de BH'nin bir yazarı sizsiniz, bu yüzden orada isterseniz paket oluşturma senaryosunu değiştirebilirsiniz. –