我正在从源代码构建Rquantlib,最近我遇到了这个问题:
.Call中的错误(“RQuantLib_setEvaluationDate”,PACKAGE =“RQuantLib”,evalDate): “RQuantLib_setEvaluationDate”对于包“RQuantLib”的.Call()不可用 错误:无法在包'RQuantLib'中加载R代码
R版本3.2.3(2015-12-10) Rcpp版本0.12.4
我已经检查了setEvaluationDate()
是否有适当的rcpp标签,所以不确定发生了什么变化。我没有编辑过该文件。它似乎是一个内联版本,而github版本是一个实际的调用:
我的rcpp为函数生成了inlcude verion:
inline bool setEvaluationDate(QuantLib::Date evalDate) {
typedef SEXP(*Ptr_setEvaluationDate)(SEXP);
static Ptr_setEvaluationDate p_setEvaluationDate = NULL;
}
来自github:
bool setEvaluationDate(QuantLib::Date evalDate);
static SEXP RQuantLib_setEvaluationDate_try(SEXP evalDateSEXP) {
BEGIN_RCPP
Rcpp::RObject __result;
Rcpp::traits::input_parameter< QuantLib::Date >::type evalDate(evalDateSEXP);
__result = Rcpp::wrap(setEvaluationDate(evalDate));
return __result;
END_RCPP_RETURN_ERROR
}
答案 0 :(得分:1)
重大升级后,您需要重新编译 Rcpp的所有家属。
例如,当我们从Ubuntu 15.04转到15.10时,使用新的ABI将编译器更改为g ++ - 5,运行此脚本以重建来自本地存储库的所有内容:
#!/usr/bin/env r
## installed packages
IP <- installed.packages()
## all local packages
AP <- available.packages(contrib.url(getOption("repos")[["local"]]))
## all packages known to us
allAP <- available.packages()
pkgs <- "Rcpp"
deps <- tools::package_dependencies(packages=pkgs, db=IP, reverse=TRUE)
## set of dependencies
alldeps <- unique(sort(do.call(c, deps)))
cat("Installing these:\n")
print(alldeps)
## this makes sense on Debian where no packages touch /usr/local
libloc <- Sys.getenv("LIBLOC", unset="/usr/local/lib/R/site-library")
install.packages(alldeps, lib=libloc)
当Rcpp中的某些内容发生变化时,情况类似,尽管我们在不更改界面方面做得非常好。但是当有疑问时,重建。如果有疑问,也会重新运行compileAttributes()
,但在那里几乎没有变化。
编辑:我刚刚(重新)安装了两个系统而没有出现故障。
编辑2:它也直接在R提示符下工作:
## what follows was one line in R and just broken up for display
R> cppFunction("bool mySetEvalDate(QuantLib::Date d) "
"{ QuantLib::Settings::instance().evaluationDate() = d;"
" return true; }", depends="RQuantLib")
R> mySetEvalDate( Sys.Date() )
[1] TRUE
R>
现在,如果您打算从C ++调用setEvaluationDate()
,那么您需要查看有关在Rcpp Attributes插图中导出到R 和C ++ 的讨论。 src/daycounter.cpp
中的代码适用于R。