[Rcpp-devel] Use size_t rather than int for vector sizes and indexing?

Jay Emerson jayemerson at gmail.com
Wed Apr 13 20:11:25 CEST 2011


Chuck,

Internally, R is using 4-byte integers for indexing, and the length of
a vector is thus constrained to 2-billion-ish elements.  Two ways
around this include packages ff and
bigmemory, for example, or relying on database-like queries.  However,
the resulting objects can't be used with standard R functions (with
some special exceptions).

Jay


On Wed, Apr 13, 2011 at 2:05 PM,  <chuck at chuckcode.com> wrote:
>
> Hi All,
>
> Thanks to Dirk Eddelbuettel and the other contributors for such a
> wonderful package. Rcpp really transforms the way that I've been able to
> incorporate c++ code into R. Makes it possible to speed up the critical
> computations while keeping all the great flexibility and features of R.
>
> I've run into a problem lately with particularly large vectors in Rcpp. I
> seem to be overflowing when my vectors get larger than 2^31 elements on a
> 64 bit system. It looks from the code of both the classic (included below)
> and the newer versions as though this is due to using ints rather than
> something like size_t (http://en.wikipedia.org/wiki/Size_t) as the type for
> size and indexing into the vector. It looks like RcppResultsSet's add()
> functions may also be using ints.
>
> Curious to know if there is a particular reason for using ints rather than
> something like size_t and if the project managers would be open to changing
> to accomodate larger vectors.
>
> Thanks,
> -Chuck Sugnet
>
> template <typename T>
> class RcppVector {
> public:
>        typedef T* iterator ;
>        typedef const T* const_iterator ;
>
>    RcppVector(SEXP vec);
>    RcppVector(int len);
>    int size() const;
>    T& operator()(int i) const;
>    T *cVector() const;
>    std::vector<T> stlVector() const;
>
>    inline const_iterator begin() const { return v ; }
>    inline const_iterator end() const { return v + len ; }
>
>    inline iterator begin(){ return v ; }
>    inline iterator end(){ return v + len ; }
>
> private:
>    int len;
>    T *v;
> };
> _______________________________________________
> Rcpp-devel mailing list
> Rcpp-devel at lists.r-forge.r-project.org
> https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
>



-- 
John W. Emerson (Jay)
Associate Professor of Statistics
Department of Statistics
Yale University
http://www.stat.yale.edu/~jay


More information about the Rcpp-devel mailing list