[Rcpp-devel] Is creating a DataFrame from std::vector-s supposed to work?
Dirk Eddelbuettel
edd at debian.org
Thu May 16 05:30:26 CEST 2013
On 15 May 2013 at 20:23, Ivan Popivanov wrote:
| Two versions of the code, see at the end. The first converts my std::vectors to
| Rcpp equivalents. The second builds the data frame from the std::vectors.
A date.frame is an R list with some special sauce, and it is probably easier
to construct this from R types -- reduces temp copies. We can after not
(directly) send a std::vector back to R, though the implicit use of wrap()
comes close.
| Calling the function containing this code numerous times (hundreds if not
| thousands) returning the std::vectors directly seems to cause random crashes or
| hangs somewhere after the return statement. The other version seems to work
| properly.
The devil is in the detail.
There was some discussion here on the list over the years, and we have one
contributed 'faster' data.frame creator here:
http://gallery.rcpp.org/articles/faster-data-frame-creation/
Dirk
| Thanks,
|
| return Rcpp::DataFrame::create(
| Rcpp::Named("Entry") = Rcpp::IntegerVector(ibeg.begin(),
| ibeg.end()),
| Rcpp::Named("Exit") = Rcpp::IntegerVector(iendOut.begin
| (),iendOut.end()),
| Rcpp::Named("Position") = Rcpp::IntegerVector
| (position.begin(), position.end()),
| Rcpp::Named("StopLoss") = Rcpp::NumericVector
| (stopLoss.begin(), stopLoss.end()),
| Rcpp::Named("StopTrailing") = Rcpp::NumericVector
| (stopTrailing.begin(), stopTrailing.end()),
| Rcpp::Named("ProfitTarget") = Rcpp::NumericVector
| (profitTarget.begin(), profitTarget.end()),
| Rcpp::Named("ExitPrice") = Rcpp::NumericVector
| (exitPrice.begin(), exitPrice.end()),
| Rcpp::Named("Gain") = Rcpp::NumericVector(gain.begin(),
| gain.end()),
| Rcpp::Named("MAE") = Rcpp::NumericVector(mae.begin(),
| mae.end()),
| Rcpp::Named("MFE") = Rcpp::NumericVector(mfe.begin(),
| mfe.end()),
| Rcpp::Named("Reason") = Rcpp::IntegerVector(reason.begin
| (), reason.end()));
| /*
| return Rcpp::DataFrame::create(
| Rcpp::Named("Entry") = ibeg,
| Rcpp::Named("Exit") = iendOut,
| Rcpp::Named("Position") = position,
| Rcpp::Named("StopLoss") = stopLoss,
| Rcpp::Named("StopTrailing") = stopTrailing,
| Rcpp::Named("ProfitTarget") = profitTarget,
| Rcpp::Named("ExitPrice") = exitPrice,
| Rcpp::Named("Gain") = gain,
| Rcpp::Named("MAE") = mae,
| Rcpp::Named("MFE") = mfe,
| Rcpp::Named("Reason") = reason);
| */
|
| ----------------------------------------------------------------------
| _______________________________________________
| 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
--
Dirk Eddelbuettel | edd at debian.org | http://dirk.eddelbuettel.com
More information about the Rcpp-devel
mailing list