如何找到 R 中 eval 期间出现的问题?

How to find what went wrong during eval in R?

部分代码:

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");

最后一行returns空。 API 文档说:“eval 方法 returns null if something wrong ”。我如何找出问题所在?

虽然它不是最优雅的,但如果您将命令放在 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 个字符来评估响应。 如果您不想在每次调用时都执行此操作,那么如果您的响应在您不期望的情况下为空,则可以重复上一个命令(并且重复出错的事情通常不会花费太长时间)。

编辑: 想一想,如果只在计算 "estimates" 时发生错误,那么将最后一个包裹在 try catch 中可能会更好:

re.eval("tryCatch(suppressWarnings(estimates), error = function(e) { paste(\"e: \",e$message) }, warning = function(w) { paste(\"w: \", w$message) })");