0

ユーザーがデータをロードして操作できるようにするインターフェースを開発しました。GUIはJavaで開発されており、すべての計算はRによってバックグラウンドで実行され、2つを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)を有効にした瞬間に、ループで使用されるコールバックメソッドを実装する必要があります。設計上、Rは、rReadConsole実装する必要のあるコールバックを呼び出すことによってのみ制御を放棄します。この例TextConsoleはデモとしてのみ機能し、ブロッキング呼び出し(readLine())を使用して待機するため、GUIでこれを使用することは絶対に避けてください。GUIの要素に反応するために、それに応じてすべてのコールバックを実装する必要があります(GUIが別のスレッドからウェイクアップするのをReadConsoleで待機し、WriteConsoleを要素にディスパッチするなど)。JGRがどのように正しく行われているかを見ることができます。あなたが本当に汎用のRGUIを構築していない限り、私はその問題に巻き込まれません...

(追記:rJava / JRIの質問にはstats-rosuda-develメーリングリストを使用してください-回答がはるかに速く得られます)

于 2011-12-22T02:43:10.253 に答える