捕获R脚本使用R.NET抛出的警告

时间:2011-12-14 09:32:30

标签: r

当我在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脚本警告和错误消息。

1 个答案:

答案 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)。希望这有帮助!