如何将 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 致力于此,还有几个处理相关主题。
我想使用 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 致力于此,还有几个处理相关主题。