【问题标题】:How to set a default value for a SEXP parameter in Rcpp如何在 Rcpp 中为 SEXP 参数设置默认值
【发布时间】:2019-07-08 14:18:05
【问题描述】:

我有一个 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 参数,一个带有 string 参数。

【问题讨论】:

    标签: r rcpp default-value


    【解决方案1】:

    聆听编译器,因为它是智慧的源泉。 SEXP 没有来自 1 的赋值,因为它是一个联合类型——这就是为什么我们让所有这些 wrap() 函数在给定所有可能的输入的情况下返回 SEXP

    所以如果是Date,请使用日期类型。十多年来,我一直在RQuantLib(毕竟导致Rcpp)这样做。如果您需要针对不同行为的混合类型,那么我认为无论哪种方式,您都很难找到默认值。

    另外:不是“RCPP”。请Rcpp。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-25
      • 1970-01-01
      • 1970-01-01
      • 2013-10-07
      • 1970-01-01
      • 2013-01-01
      • 2011-07-31
      相关资源
      最近更新 更多