使用包含索引的IntegrVector子集Rcpp::DateVector?操作员[]过载
Subsetting Rcpp::DateVector using IntegerVector that contains indices? Operator [] overload
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));
}
在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
中使用数字日期(或日期时间)值,这也为您提供了所需的子设置。Rlpapi包有一些例子——本质上,我只是将自epoch以来相当于小数秒的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++ 与操作员不匹配<<
- 操作员C++的模棱两可的过载
- C++中>>操作员过载时出现问题?
- NaN 上的宇宙飞船操作员
- 比根<操作员
- SFINAE不能防止模棱两可的操作员过载吗?
- 什么是现实中的"endl"(或任何输出操纵器)?它是如何实现的,它如何与操作员<<一起工
- 为什么"delete"操作员给我访问权限冲突
- 为什么使操作员成为新的专用会打破 std::shared_ptr?
- 在这种情况下是私有的吗?试图使操作员<<过载
- C++操作员过载>>
- 是否有 C++20 浮点数的包装器,使我能够默认宇宙飞船操作员?
- 与异常处理程序中的操作员<<不匹配
- 复印作业操作员说明
- 友谊和操作员+=重载
- >操作员在比较两个C++容器时会怎么做?
- 与操作员比较两个计时时间点
- C++操作员订单评估
- 使用包含索引的IntegrVector子集Rcpp::DateVector?操作员[]过载