[Rcpp-devel] What's the most efficient way to convert a NumericVector to an array of doubles

Anwar Ludin anwar.ludin at riskcetera.com
Sat Jun 29 17:17:57 CEST 2013


Romain,

Thanks a lot for the clarifications! 

Anwar

On Jun 29, 2013, at 12:35 PM, Romain Francois <romain at r-enthusiasts.com> wrote:

> Hello, 
> 
> just use: 
> 
> double* values = input.begin() ;
> 
> A NumericVector uses R allocated memory, and R allocates an array of doubles to store a numeric vector. 
> 
> You then need to remember you dońt own the pointer. So make sure your code does not eg delete[] it. 
> 
> The code you've used was very inefficient and will make many unecessary copies of the data, each time the std::vctor wants to grow. 
> 
> If you want a std:vector you can do something like this: 
> 
> std::vector<double> vec( input.begin(), input.end() ) ; 
> 
> Or: 
> 
> std::vector<double> vec = as< std::vector<double> >(input) ;
> 
> Romain
> 
> Le 29 juin 2013 à 12:08, Anwar Ludin <anwar.ludin at riskcetera.com> a écrit :
> 
>> Hello,
>> 
>> I need to interface some R code with a numerical library containing functions taking as input double*
>> 
>> What is the most efficient way to create an array of doubles from a NumericVector.
>> 
>> I was thinking of something like:
>> 
>> 
>> 
>> 
>> 
>> 
>> // input is of type Rcpp::NumericVector and passed from R
>> std::vector<double> vec;
>> std::copy(input.begin(), input.end(), std::back_inserter(vec));
>> 
>> double* values = &vec[0];
>> 
>> // now call function taking a double*
>> 
>> 
>> Regards,
>> 
>> Anwar
>> _______________________________________________
>> 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

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20130629/b6877720/attachment.html>


More information about the Rcpp-devel mailing list