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/