Rcpp用户,

我是Rcpp的新手。我想使用具有整数索引的DateVector子集IntegerVector。但是,直接使用[]会导致错误消息:

no viable overloaded operator[] for type 'Rcpp:DateVector'.


这是一个说明性的例子:

在cpp文件-dv.cpp中:

#include < Rcpp.h >

using namespace Rcpp;

// [[Rcpp::export]]
DataFrame subsetDateVector1(DataFrame df) {

  DateVector    dv = df["dv"];
  IntegerVector iv = df["iv"];

  for (int i = 0; i < dv.size(); i++) {
    dv[i] = dv[i] + 7;
  }

  IntegerVector idx = seq_len(2) - 1;

  // DateVector dv1 = dv[idx];
  // Q: cannot subset DateVector using IntegerVector?
  // Any Reason?
  // How to work around, efficiently?

  // my work around
  Function formatDate("format.Date");
  CharacterVector dvc(dv.size());
  for (int i = 0; i < dv.size(); i++) {
    dvc[i] = as<std::string>(formatDate(wrap(dv[i])));
  }
  CharacterVector dv1 = dvc[idx];

  IntegerVector iv1 = iv[idx];

  return (DataFrame::create(_["dv"] = dv1, _["iv"] = iv1));

}


在R文件-dv.r中:

# subsetting Rcpp::DateVector [Ex]

source("dv.cpp")

dv = Sys.Date() + -2:2

iv = 1:5

df = data.frame(dv = dv, iv = iv)

> df
          dv iv
1 2015-12-06  1
2 2015-12-07  2
3 2015-12-08  3
4 2015-12-09  4
5 2015-12-10  5

> subsetDateVector1(df)
          dv iv
1 2015-12-13  1
2 2015-12-14  2


我觉得subsetDateVector1中的解决方法不是很有效。

DateVector dv1 = dv[idx];没有实施的任何原因?

有什么有效的方法可以基于索引获取DateVector上的子集?

在此先感谢。

最佳答案

DateVector和DatetimeVector在Rcpp中相距甚远,并且从最早的日子(从RQuantLib访问它们)开始就可以生存。它们可能应该被弃用,而应该用更好的东西代替,但是我还没有做到这一点。

您可以只使用NumericVector中的数字Date(或Datetime)值,这也可以为您提供所需的子设置。 Rblpapi包中有一些示例-实质上,我只是将自历元以来的秒数等价的POSIXct放入NumericVector,然后将其重新分类为POSIXct

最后,如果可以的话,请不要

  Function formatDate("format.Date");
  CharacterVector dvc(dv.size());
  for (int i = 0; i < dv.size(); i++) {
    dvc[i] = as<std::string>(formatDate(wrap(dv[i])));
  }


您可以用C ++很好地格式化日期和时间。值得学习。

关于c++ - 使用包含索引的IntegerVector子集Rcpp::DateVector?运算符[]重载,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34165498/

10-13 01:55