Rcpp中DateVector的最大日期

时间:2017-03-30 15:03:19

标签: r date max rcpp

如何将DateVector中的最大日期保存为Rcpp中的变量?

以下玩具示例将返回错误消息:

  

没有可行的转换来自' __ gnu_cxx :: __ normal_iterator< Rcpp :: Date   *,std :: vector< Rcpp :: Date,std :: allocator< Rcpp :: Date> > >'到' NumericVector' (又名' Vector< 14>')

#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
Date date_toy_example(DataFrame d){

  // Get date vector from data frame
  DateVector  dte = d["date"];

  // Get max date 
  Date max_dte = std::max_element(dte.begin(), dte.end());

  // Return maximum date
  return max_dte;
}



// R code

/*** R
df <- data.frame(id=1:10, date=seq(as.Date("2015-01-01"),as.Date("2015-01-10"), by="day"))
date_toy_example(df)
*/

1 个答案:

答案 0 :(得分:3)

std::max_element返回一个迭代器;你需要取消引用它以获得基础值:

#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
Date MaxDate(DataFrame d) {
    DateVector  dte = d["date"];
    Date max_dte = *std::max_element(dte.begin(), dte.end());
    //            ^^^

    return max_dte;
}

/*** R

df <- data.frame(
    id=1:10,
    date = seq(as.Date("2015-01-01"),
        as.Date("2015-01-10"),
        by="day")
)
MaxDate(df)
# [1] "2015-01-10"

max(df$date)
# [1] "2015-01-10"

*/

或者,将您的输入视为普通NumericVector并使用Rcpp::max

// [[Rcpp::export]]
Date MaxDate(DataFrame d) {
    NumericVector dte = d["date"];
    return Date(Rcpp::max(dte));
}