我开发了一个界面,允许用户加载和处理数据。 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了。 有人对这是为什么有任何想法或解释吗?

提前致谢,

亚兰

===============>>#1 票数:0 已采纳

从根本上讲,如果REPL未运行,则仅通过代码中的eval调用使用R。 您可以随时控制,除了在实际评估期间。 这是最常见的用法,因为您几乎可以用这种方法做任何事情。

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

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

  ask by Aran Brady translate from so

未解决问题?本站智能推荐: