Rcpp/C++/R:比较日期时间矢量与日期时间时出错(错误:"运算符>"的不明确重载)
Rcpp/C++/R: Error in comparison DatetimeVector vs. Datetime (error: ambiguous overload for 'operator>')
不幸的是,我无法进行比较。当我尝试编译时,我会收到错误消息:"操作员>"的模棱两可的超载(操作数类型为'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
中可能是有意义的。
一个更完整的解决方案:直接将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
请注意,我正在使用返回值而不是输出参数,因为这拟合了R的功能样式。我还使用明确的逻辑值而不是隐式值。当然,可以使用从dtv > dtvopen
创建的逻辑向量来创建原始函数的输出值。
相关文章:
- 使用C++的日期库读取时间
- 如何找到两个日期之间的时间差异(以秒和纳秒为单位)?
- 为什么在C++中获取日期和/或时间如此复杂?
- 在 MacOS 上C++:显示日期和时间问题
- 如何将我的每个矢量字符串转换为纪元时间日期
- 将 unix 时间戳转换为人类可读的日期
- 使用霍华德·欣南特的日期库将时间信息添加到year_month_day
- 注册表-获取值(而不是键)上次更改的时间和键创建日期
- 我的C++程序如何访问计算机的日期和时间以打印和使用当前年份?
- 使用 C++将时间戳转换为格式化的日期时间
- C++代码的 C# 日期时间等效项是什么?
- 以毫秒级精度对日期和时间进行操作
- 如何在提升日期时间中创建日期范围?
- 将日期字符串转换为 unix 时间戳
- C 自定义时间日期结构到UTC时期
- 使用SNTP(Windows C )从服务器获取时间/日期
- C 的SNTP客户端的时间/日期
- 将文件名的文件另存为当前时间日期
- 在没有宏的情况下获取编译时间日期和时间
- C++应用程序构建时间/日期保存