我使用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微秒。 有没有办法更好地优化转换或完全避免它。
答案 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
,因此转换相当便宜。