r - 如何在 Rcpp 中为 SEXP 参数设置默认值
问题描述
我有一个 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 参数。
解决方案
听编译器,因为它是 wisdown 的来源。SEXP
没有从 1 开始的赋值,因为它是一个联合类型——这就是为什么我们有所有这些wrap()
函数来返回SEXP
给定的所有可能的输入。
因此,如果它是Date
,请使用日期类型。十多年来,我一直在这样做RQuantLib
(毕竟这会导致 to )。Rcpp
如果您需要针对不同行为的混合类型,那么我认为无论哪种方式,您都很难找到默认值。
另外:不是“RCPP”。RCPP,请。
推荐阅读
- scalatest - Scalatest中mustBe的否定是什么
- mysql - 对于某些具有正确凭据的用户,Laravel 登录返回 false
- python - IndexError:列表索引超出范围,但它没有
- python - 散点图两个特征向量集在同一个图中
- linux - g++:错误:无法识别的命令行选项'--32';你是说'-m32'吗?
- sklearn-pandas - 如何清理 Pandas 数字列中的文本数据类型?
- node.js - 在heroku上部署打字稿应用程序,执行错误
- postgresql - 不等于字符串值不适用于 postgreSQL
- php - Microsoft Outlook 日历 API 中的 ErrorOccurrenceTimeSpanTooBig?
- reactjs - 我的数组计数器落后了 1 步。我该如何解决这个问题?