如何在Rcpp中加速xts数据转换为DatatimeVector?

时间:2015-04-20 14:47:11

标签: c++ r xts rcpp

我使用Rcpp分析XTS数据并使用以下rcpp代码获取其时间索引:

#include <Rcpp.h>
using namespace Rcpp;
using namespace std;

// [[Rcpp::export]]
DatetimeVector xtsIndex(NumericMatrix X)
{
  DatetimeVector v(NumericVector(X.attr("index")));
  return v;
}

DatetimeVector tmpindexDaily = xtsIndex(askDailymat);  // Get xts index to Rcpp vector

事实证明,这个转换需要2 ms来执行某一组数据,我只需要时间索引,没有这个代码,它需要的时间少于100微秒。 有没有办法更好地优化转换或完全避免它。

1 个答案:

答案 0 :(得分:4)

使用具有适当类属性的NumericVector可能会更好。这是几个星期前我用过的快速一次性功能in another project

Rcpp::NumericVector createPOSIXtVector(const std::vector<double> & ticks, 
                                       const std::string tz) {
    Rcpp::NumericVector pt(ticks.begin(), ticks.end());
    pt.attr("class") = Rcpp::CharacterVector::create("POSIXct", "POSIXt");
    pt.attr("tzone") = tz;
    return pt;
}

您可以从其他容器,矩阵列,向量等开始,可以保存double值,并使用时间(POSIXct)时间实际上是小数{{1}的事实从那个时代开始。我们从另一个API获得double,因此转换相当便宜。