如何将 Rcpp::DateVector 复制到 std::vector<boost::gregorian::date>

How to copy Rcpp::DateVector to std::vector<boost::gregorian::date>

我想使用 Rinside 将数据从 zoo 对象传递到我的 C++ 程序中, 但我不知道如何传递日期。

这是一个例子

 RInside R(argc, argv);              // create an embedded R instance


std::string cmd = "suppressMessages(library(zoo)); "
                  "z <- zoo(rnorm(10), as.Date('2000-01-01') - 0:10);"; 

R.parseEvalQ(cmd); 

 std::vector<double> v = Rcpp::as< std::vector< double > >(R.parseEval("coredata(z)"));
Rcpp::DateVector   d ( (SEXP) R.parseEval("index(z)") );

std::vector<boost::gregorian::date> dt =   //How assign d to dt ?

您需要简单的转换器,例如 RcppBDT package:

template <> boost::gregorian::date as( SEXP dtsexp ) {
    Rcpp::Date dt(dtsexp);
    return boost::gregorian::date(dt.getYear(), dt.getMonth(), dt.getDay());
}

然后你需要对其进行矢量化。或者,可以使用整数向量(自纪元以来的天数)。

编辑: 有一个 entire Rcpp Gallery post 致力于此,还有几个处理相关主题。