0

我开发了一个界面,允许用户加载和操作数据。GUI 是用 Java 开发的,所有的计算都是由 R 在后台完成的,将两者与 jri 联系起来。这个想法是用户不必具备任何 R 知识即可使用它,它是所有选项和按钮。但是,如果需要,我想让用户选择编写一些代码。所以这是我的问题:

如果我使用以下代码启动 Rengine 并且不让用户通过控制台进行交互,则一切正常:

    Rengine re=new Rengine(null, false, new TextConsole());

但如果我使用这个:

    Rengine re=new Rengine(null, true, new TextConsole());

gui 的功能不起作用。我尝试使用

re.startMainLoop();

加载数据后的功能。我能够从 R 中的命令行操作数据,例如,我可以从加载的数据列中创建一个新变量:

newVariable<-data$column1

但是再一次,我不能再使用gui了。有没有人对这是为什么有任何想法或解释?

提前致谢,

阿兰

4

1 回答 1

0

从根本上说,如果 REPL 没有运行,R 只是通过eval代码调用来使用。除了实际评估期间,您始终可以控制。这是最常见的用途,因为你几乎可以用这种方式做任何事情。

启用事件循环 (REPL) 的那一刻,您必须实现循环使用的回调方法。rReadConsole按照设计,R 仅通过调用您必须实现的回调来放弃控制。该示例TextConsole仅用作演示,它使用阻塞调用 ( readLine()) 来等待,因此您绝对不想在 GUI 中使用它。您必须相应地实现所有回调以对您的 GUI 元素做出反应(在 ReadConsole 中等待您的 GUI 从单独的线程中唤醒它,将 WriteConsole 分派到您的元素等)。你可以看看 JGR 它是如何正确完成的。除非您真的在构建通用 R GUI,否则我不会遇到那种麻烦...

(PS:对于 rJava/JRI 问题,请使用 stats-rosuda-devel 邮件列表 - 您可以更快地获得答案)

于 2011-12-22T02:43:10.253 回答