Rcpp/C++/R:比较日期时间矢量与日期时间时出错(错误:"运算符>"的不明确重载)

Rcpp/C++/R: Error in comparison DatetimeVector vs. Datetime (error: ambiguous overload for 'operator>')

本文关键字:时间 日期 gt 运算符 不明确 错误 重载 比较 C++ 出错 Rcpp      更新时间:2023-10-16

不幸的是,我无法进行比较。当我尝试编译时,我会收到错误消息:"操作员>"的模棱两可的超载(操作数类型为'rcpp :: datetime'and'rcpp :: traits :: storage_type< 14> ::类型{aka double}'(

我附上了一个例子。它是高度简化的,旨在使错误消息可重现。

您能帮我了解怎么了吗?

// [[Rcpp::export]]
void identifyValidSignalsTest(DatetimeVector & dtvopen, IntegerVector & ivsignal) {
  Datetime dtv("2000-01-01 00:00:00");
  int n = dtvopen.length();
  // Schleife
  for(int i = 0; i < n; ++i) {
    if (dtv > dtvopen[i]) {
      ivsignal[i] = 1;
    }
  }
}

我看到了两种可能性:

最小更改:将dtv < dtvopen[i]替换为dtv.getFractionalTimestamp() < dtvopen[i]。如果向量很长,则仅致电dtv.getFractionalTimestamp()并将结果保存在double中可能是有意义的。

一个更完整的解决方案:直接将dtvdtvopen进行比较:

#include <Rcpp.h>
// [[Rcpp::export]]
Rcpp::LogicalVector identifyValidSignalsTest(Rcpp::DatetimeVector & dtvopen) {
    Rcpp::Datetime dtv("2000-01-01 00:00:00");
    return dtv > dtvopen;
}

/***R
dates <- c(Sys.time(), as.POSIXct("1999-01-01"))
identifyValidSignalsTest(dates)
*/

结果:

> dates <- c(Sys.time(), as.POSIXct("1999-01-01"))
> identifyValidSignalsTest(dates)
[1] FALSE  TRUE

请注意,我正在使用返回值而不是输出参数,因为这拟合了R的功能样式。我还使用明确的逻辑值而不是隐式值。当然,可以使用从dtv > dtvopen创建的逻辑向量来创建原始函数的输出值。