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
上获取子集的任何有效方法吗?
感谢您的进步。
答案 0 :(得分:2)
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])));
}
您可以很好地格式化C ++中的日期和时间。值得学习的是。