C++ 使用包含索引的IntegerVector子集Rcpp::DateVector?操作员[]过载
Rcpp用户 我是Rcpp的新手。我想使用具有整数索引的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
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])));
}