当我在R Console中使用以下脚本时,它将输出作为字符串“Warning”
jj = ts(scan("jj.dat"), start=1960, frequency=4)
tryCatch(arima(jj,
order = c(1, 0,1)),
warning=function(w) cat("Warning"))
我试图在R.NET中使用相同的代码并期望得到字符串“Warning”,但我得到Parser Exception显示“Code error”。下面是我在R.NET中尝试过的代码片段。
try
{
string script = "tryCatch(arima(jj,
order = c(4, 0,6)),
warning=function(w) cat(\"Warning\"))";
string str=engine.EagerEvaluate("script").AsCharacter().First();//*
}catch (Exception ex)
{
}
请告诉我一些想法,我们如何解决这个问题。或者是否有其他方法可以在R.NET中捕获R脚本警告和错误消息。
答案 0 :(得分:1)
根据我在这些R集成到其他语言(rpy,耦合python和R)中的经验,我会将.NET内部的R源代码量保持在最低限度。我想要的方法是在.R文件中编写一个函数,它可以实现你想要的。
hello = function() { print("Hello World") }
将此函数保存在spam.r
中允许您使用source
以将此新函数加载到.NET内运行的R会话中。然后你就可以得到一个非常简单的R脚本:
source("spam.r")
hello()
这当然是一个非常简单的例子,但hello
可能包含更复杂的代码。通过这种方式,您可以防止因为在.NET中编写R代码而导致的任何错误(在rpy中存在一些问题,例如不允许使用data.frame)。希望这有帮助!