RDotNet ICharacterDevice 捕获输出

RDotNet ICharacterDevice Capture Output

我正在尝试实现一个 ICharacterDevice 来捕获完整的输出。我找到了一些关于此的信息,例如:

Implementing an interactive R console in c# / rdotnet?

然而,我发现不可能找到一个完整的例子,并且很难靠我自己来实现它。有没有人用例子做过这个?

非常感谢

马克

为了捕获输出,您需要实现自己的 ICharacterDevice。好消息是您真的只需要实现 WriteConsole 方法。您可以从默认 ConsoleDevice 开始,也可以从头开始您自己的设置。

public class MyCharacterDevice : RDotNet.Devices.ICharacterDevice
{
    public StringBuilder sb = new StringBuilder();

    public void WriteConsole(string output, int length, RDotNet.Internals.ConsoleOutputType outputType)
    {
        sb.Append(output);
    }

    //rest of the implementation here
}

我添加了一个 StringBuilder 并附加了每条输出消息。

最后,您需要将此 ICharacterDevice 传递给 GetInstance 和 Initialize 方法:

RDotNet.StartupParameter sp = new StartupParameter();
sp.Interactive = false;
sp.Quiet = false;

MyCharacterDevice ic = new MyCharacterDevice();
REngine.SetEnvironmentVariables(Rpath);
REngine engine = REngine.GetInstance("", true, sp, ic);

if (engine.IsRunning == false)
{
    engine.Initialize(sp, ic, true);
}

//engine.Evaluate code...

string rConsoleMessages = ic.sb.ToString();