如何在 Rcpp 中为 SEXP 参数设置默认值
How to set a default value for a SEXP parameter in Rcpp
我有一个 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) ;
}
编译器告诉我 "Cannot initialize a parameter of type SEXP with an R value of type int" 所以很明显我不能使用 1 作为 MaturityDate 的默认值。如果可能的话,我想避免使用两个不同的函数,一个带有 int 参数,一个带有 string 参数。
听听编译器,因为它是智慧的源泉。 SEXP
没有从 1 赋值,因为它是一个联合类型——这就是为什么我们有所有这些 wrap()
函数到 return a SEXP
给定所有可能的输入。
因此,如果它是 Date
,请使用日期类型。十多年来,我一直在 RQuantLib
(最终导致 Rcpp
)这样做。如果您需要针对不同行为的混合类型,那么我认为您将很难以任何一种方式得出默认值。
另外:不是 "RCPP"。 Rcpp,请。
我有一个 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) ;
}
编译器告诉我 "Cannot initialize a parameter of type SEXP with an R value of type int" 所以很明显我不能使用 1 作为 MaturityDate 的默认值。如果可能的话,我想避免使用两个不同的函数,一个带有 int 参数,一个带有 string 参数。
听听编译器,因为它是智慧的源泉。 SEXP
没有从 1 赋值,因为它是一个联合类型——这就是为什么我们有所有这些 wrap()
函数到 return a SEXP
给定所有可能的输入。
因此,如果它是 Date
,请使用日期类型。十多年来,我一直在 RQuantLib
(最终导致 Rcpp
)这样做。如果您需要针对不同行为的混合类型,那么我认为您将很难以任何一种方式得出默认值。
另外:不是 "RCPP"。 Rcpp,请。