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
创建的逻辑向量来创建原始函数的输出值。
很遗憾,我无法进行比较。当我尝试编译时,我收到错误消息: '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
创建的逻辑向量来创建原始函数的输出值。