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

时间:2019-02-14 14:10:06

标签: r rcpp default-value

我有一个Rcpp函数,该函数具有一个可选参数,它是金融工具的到期日。可以以字符串(例如“ 2y”)或整数形式给出。如果未提供任何值,则该函数需要使用默认整数。如何设置该参数的默认值?

我已经用SEXP参数定义了该函数,代码将测试这是否是字符串,并根据此转换以两种不同的方式在实际日期中转换该成熟度。但是,我不能为SEXP参数设置默认值。看来这是一个基本问题,但我在Google上搜索了很多,却找不到任何内容。

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) ;
}

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

1 个答案:

答案 0 :(得分:1)

收听编译器,因为它是wisdown的来源。 SEXP没有从1开始的赋值,因为它是一个联合类型-这就是为什么我们拥有所有这些wrap()函数以在给定所有可能的输入的情况下返回SEXP的原因。

因此,如果它是Date,请使用日期类型。我在RQuantLib(毕竟导致Rcpp)中已经做了十多年了。如果您需要一种混合类型来实现不同的行为,那么方法将很难为您提供一种默认值。

也:不是“ RCPP”。 Rcpp,请。