Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用包含索引的IntegerVector子集Rcpp::DateVector?操作员[]过载_C++_R_Rcpp - Fatal编程技术网

C++ 使用包含索引的IntegerVector子集Rcpp::DateVector?操作员[]过载

C++ 使用包含索引的IntegerVector子集Rcpp::DateVector?操作员[]过载,c++,r,rcpp,C++,R,Rcpp,Rcpp用户 我是Rcpp的新手。我想使用具有整数索引的IntegerVector子集DateVector。但是,直接使用[]会导致错误消息: no viable overloaded operator[] for type 'Rcpp:DateVector'. 下面是一个示例: 在cpp文件-dv.cpp中: #include < Rcpp.h > using namespace Rcpp; // [[Rcpp::export]] DataFrame subsetDateVe

Rcpp用户

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

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));

}
我觉得
subsetDateVector1
中的工作效率不高

DateVector dv1=dv[idx]的任何原因未实现

基于索引的
DateVector
上有没有有效的子集获取方法


感谢进步。

DateVector和DatetimeVector在Rcpp中有点不同,从最早的日子(从RQuantLib访问时)就存在了。它们可能应该被弃用,并被更好的东西取代,但我还没有做到这一点

您只需使用
NumericVector
中的数字日期(或日期时间)值即可,这也可以为您提供所需的子集。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])));
  }
函数formattate(“format.Date”);
字符向量dvc(dv.size());
对于(int i=0;i

<>你可以很好地在C++中设置日期和时间。这是值得学习的

谢谢你,德克。另外,感谢您对日期格式的建议。我学习的技巧是(formattate(wrap(dv[I]));用于将日期从RcppExamples转换为字符串。我想我需要深入研究C++的日期库来设计好的格式化方法?我没有找到一个专门的主题日期“无缝R和C++集成与Rcpp(使用R!)”。再次感谢您提供了这样一个伟大的接口之间的R和C++。
  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])));
  }