以下Rcpp函数无法编译:
// [[Rcpp::export]]
bool dateProb(DateVector dateVec, Date date) {
return (dateVec[0] < date);
}
我收到错误消息:
使用重载运算符'<'是模棱两可的(操作数类型为'typename storage_type <14> :: type'(aka'double')和'Rcpp :: Date)
我在做什么错?为什么dateVec[0]
的类型不是Rcpp::Date
?
答案 0 :(得分:4)
好吧,MAP_FIXED
不是Rcpp::DateVector
的向量,而是从Rcpp::Date
派生的类(请参见here)。考虑到R自己对日期向量的内部处理,这是有道理的:
Rcpp::NumericVector
因此,乍一看似乎令人惊讶,但这并不是真正的障碍。您可以这样做:
pryr::sexp_type(as.Date("2019/05/04"))
# [1] "REALSXP"
这可以很好地编译,并给出R的预期答案:
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
bool dateProb(DateVector dateVec, Date date) {
Date date2 = dateVec(0);
return (date2 < date);
}
如果您真正想要的是x <- as.Date("2019/05/04")
y <- as.Date("2019/05/03")
dateProb(x, y)
# [1] FALSE
dateProb(y, x)
# [1] TRUE
的向量,则可以使用成员函数Rcpp::Date
轻松实现:
getDates()
或仅将其指定为输入:
// [[Rcpp::export]]
bool dateProb(DateVector dateVec, Date date) {
Date date2 = dateVec(0);
std::vector<Date> newdates = dateVec.getDates();
Rcpp::Rcout << (newdates[0] < date) << "\n";
return (date2 < date);
}
/*** R
x <- as.Date("2019/05/04")
y <- as.Date("2019/05/03")
dateProb(x, y)
dateProb(y, x)
*/
> x <- as.Date("2019/05/04")
> y <- as.Date("2019/05/03")
> dateProb(x, y)
0
[1] FALSE
> dateProb(y, x)
1
[1] TRUE