2011-08-13 6 views
12

古いバージョンのR 2.9では、rterm.exeを使用してバッチからRプログラムを実行し、ユーザーが前後にスクロールできるグラフィックスウィンドウを作成できましたグラフを表示します。getGraphicsEvent非対話型セッションのキーボードを読む

kbd <- function(key) { 
if (key == "q") { "Quit" } else NULL } 
getGraphicsEvent(" ", onKeybd = kbd) 

これにより、ユーザは、「Q」キーを押すまで、グラフィックスがオープンビューア開催:私のようないくつかのRコードを使用することによってそれを行うことができました。 Rの新しいバージョンでは、これはバッチ(Rterm.exeを使用しない非対話型)から開始されるため、キー値は常に​​NULLになり、グラフィックスウィンドウは単に点滅して閉じるように見えます。私の疑問は、私が何らかの形でRシステムに擬似的なインタラクティブなセッションを実行していると確信でき、getGraphicsEventの動作がNULLを直ちに返さないようにする方法があるかどうかです。ここで

+0

問題を完全に説明するためのコードをいくつか追加できますか? '?getGraphicsEvent'の例は、' Rterm.exe'で私のために働きます。 –

+0

私は助けることができないかもしれませんが、私はなぜあなたがそのようなアプローチをとっているのか不思議です。私は数年前からRを使用してきましたが、Rstudioを使ってほとんど開発していましたが、グラフィックスにはあまり気にしませんでしたが、最近は光沢のあるライブラリと非常に使いやすいインタラクティブなアプリケーションを探しています。たぶん柔軟性があれば、光沢を見ることができます。 –

答えて

0

はgetGraphicsEventのソースコードです:

 
function (prompt = "Waiting for input", onMouseDown = NULL, onMouseMove = NULL, 
    onMouseUp = NULL, onKeybd = NULL, consolePrompt = prompt) 
{ 

    if (!interactive()) 
     return(NULL) 
    if (!missing(prompt) || !missing(onMouseDown) || !missing(onMouseMove) || 
     !missing(onMouseUp) || !missing(onKeybd)) { 
     setGraphicsEventHandlers(prompt = prompt, onMouseDown = onMouseDown, 
      onMouseMove = onMouseMove, onMouseUp = onMouseUp, 
      onKeybd = onKeybd) 
    } 
    .External2(C_getGraphicsEvent, consolePrompt) 
} 

ことがif (!interactive()) return(NULL)で明示的に作られているので、それは、NULLを返し、なぜあなたが見ることができます。これはあなたの元のコードに挿入してみてください。

 

getGraphicsEvent2 = function (prompt = "Waiting for input", onMouseDown = NULL, onMouseMove = NULL, 
    onMouseUp = NULL, onKeybd = NULL, consolePrompt = prompt) 
{ 

    # if (!interactive()) 
    #  return(NULL) 
    if (!missing(prompt) || !missing(onMouseDown) || !missing(onMouseMove) || 
     !missing(onMouseUp) || !missing(onKeybd)) { 
     setGraphicsEventHandlers(prompt = prompt, onMouseDown = onMouseDown, 
      onMouseMove = onMouseMove, onMouseUp = onMouseUp, 
      onKeybd = onKeybd) 
    } 
    .External2(C_getGraphicsEvent, consolePrompt) 
} 
environment(getGraphicsEvent2) = environment(grDevices::getGraphicsEvent) 

dragplot(rnorm(1000), rnorm(1000)) 


kbd = function(key) { 
if (key == "q") { "Quit" } else NULL } 
getGraphicsEvent2("Waiting for input", onKeybd = kbd) 

(つまり私は、グラフィックスデバイスとしてX11とOSX上のプロットを操作することができませんでした)機能を失うようだが、少なくともプロットはアップ状態のまま。この関数の内部コードへの呼び出しは最近変更されました(Rのソースコードを2つのバージョンで見る - R 2.6.2のこの関数のコードは、例えばR-2.6.2/src/library/grDevicesです/R/gevents.R)。

1

あなたは、オプションのWindows上

--ess 

、またはUnix-類似品に

--interactive 

でRTERMを開始することにより、非対話型として検出される1で偽の対話型セッションをすることができます。

これは、すべての機能でセッションがインタラクティブと見なされるため、他の問題が発生する可能性があります。セッションの途中でそのフラグを変更することはできません。これは、I/Oに関連する多くの事柄に影響するためです。

関連する問題