如何在Rcpp中为SEXP参数设置默认值

问题描述 投票:0回答:1

我有一个Rcpp函数,它有一个可选参数,这是金融工具的成熟度。这可以作为字符串(例如“2y”)或整数给出。如果没有给出值,则函数需要使用默认整数。如何设置该参数的默认值?

我已经使用SEXP参数定义了该函数,代码测试这是否是一个字符串,并且取决于它以两种不同的方式转换实际日期中的成熟度。但是,我无法为SEXP参数设置默认值。这似乎是一个基本的问题,但我搜索了相当多的东西,无法找到任何东西。

Date CPPConvertDate(Date ParamDate, SEXP MaturityDate = 1) {
  Date Result ;
  const int type_Matu = TYPEOF(MaturityDate) ;

  if (type_Matu == 16){
   std::string MaturityDate_string = as<std::string>(MaturityDate) ;
   //' DO STUFF
  } else {
   int MaturityDate_int = as<int>(MaturityDate) ;
     //' DO OTHER STUFF

  }
  return (Result) ;
}

编译器告诉我“无法使用类型为int的R值初始化SEXP类型的参数”,因此我很清楚我不能使用1个默认值作为MaturityDate。如果可能的话,我想避免使用两个不同的函数,一个使用int参数,另一个使用字符串参数。

r rcpp default-value
1个回答
1
投票

听取编译器,因为它是一个明智的来源。 SEXP没有1的任务,因为它是一个联合类型 - 这就是为什么我们有所有那些wrap()函数返回一个SEXP给出所有可能的输入。

因此,如果它是Date,请使用日期类型。我在RQuantLib(毕竟导致Rcpp)已经做了十多年了。如果你需要一个混合类型用于不同的行为,那么你将很难以任何方式提出一个默认值。

另外:不是“RCPP”。 Rcpp,拜托。

© www.soinside.com 2019 - 2024. All rights reserved.