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

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

很遗憾,我无法进行比较。当我尝试编译时,我收到错误消息: 'operator>' 的不明确重载(操作数类型为 'Rcpp::Datetime' 和 'Rcpp::traits::storage_type<14>::type {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.

中可能有意义

更完整的解决方案:将dtv直接与dtvopen进行比较:

#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

请注意,我使用的是 return 值而不是输出参数,因为这更符合 R 的函数式风格。我还使用显式逻辑值而不是隐式逻辑值。当然可以使用从 dtv > dtvopen 创建的逻辑向量来创建原始函数的输出值。