部分代码:
Rengine re = getRengine();
re.eval("library(quantmod)");
re.eval("library(PerformanceAnalytics)");
re.eval("library(tseries)");
re.eval("library(FinTS)");
re.eval("library(rugarch)");
re.eval("library(robustbase)");
re.assign("arLagNum", new double[]{1});
re.assign("maLagNum", new double[]{1});
re.assign("archLagNum", new double[]{1});
re.assign("garchLagNum", new double[]{1});
re.eval("garchSpec <- ugarchspec(variance.model = list(model=\"iGARCH\", garchOrder=c(archLagNum,garchLagNum)), mean.model = list(armaOrder=c(arLagNum,maLagNum)), distribution.model=\"std\")");
re.assign("transformedTsValueData", new double[]{getSomeDoubles()};
re.eval("estimates <- ugarchfit(spec = garchSpec, data = transformedTsValueData, solver.control = list(trace = 1))");
re.eval("estimates");
最后一行返回null 。 API文档说:“如果出现错误,eval方法返回null ”。我怎么知道出了什么问题?
答案 0 :(得分:1)
当然,这不是最优雅的,但是如果你把命令放在try catch中,你可以尝试获取一些信息:
re.eval("estimates <-tryCatch(suppressWarnings(ugarchfit(spec = garchSpec, data = transformedTsValueData, solver.control = list(trace = 1))), error = function(e) { paste(\"e: \",e$message) }, warning = function(w) { paste(\"w: \", w$message) })");
然后,您可以通过检查前几个3个字符来评估响应。 如果你不想为每次调用都这样做,你可以重复你的最后一个命令,如果你的反应是空的,当你不期望它(并重复出错通常不会花太长时间)。
编辑: 想一想,如果只在评估“估计”时发生错误,最好将最后一个包装在try catch中:
re.eval("tryCatch(suppressWarnings(estimates), error = function(e) { paste(\"e: \",e$message) }, warning = function(w) { paste(\"w: \", w$message) })");