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

时间:2015-07-07 06:26:38

标签: r rcpp rinside

我想使用zoo将数据从Rinside对象传递到我的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 ?

1 个答案:

答案 0 :(得分:1)

您需要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致力于此,以及其他几个相关主题的处理。