getGraphicsEvent のソース コードは次のとおりです。
関数 (prompt = "入力待ち"、onMouseDown = NULL、onMouseMove = NULL、
onMouseUp = NULL、onKeybd = NULL、consolePrompt = プロンプト)
{
if (!インタラクティブ())
リターン(NULL)
if (!missing(プロンプト) || !missing(onMouseDown) || !missing(onMouseMove) ||
! 行方不明 (onMouseUp) || !missing(onKeybd)) {
setGraphicsEventHandlers(prompt = プロンプト、onMouseDown = onMouseDown、
onMouseMove = onMouseMove、onMouseUp = onMouseUp、
onKeybd = onKeybd)
}
.External2(C_getGraphicsEvent, consolePrompt)
}
NULL を返す理由は で明示されているため、わかりますif (!interactive()) return(NULL)
。これを元のコードに挿入してみてください。
getGraphicsEvent2 = function (prompt = "入力待ち"、onMouseDown = NULL、onMouseMove = NULL、
onMouseUp = NULL、onKeybd = NULL、consolePrompt = プロンプト)
{
# if (!interactive())
# リターン(NULL)
if (!missing(プロンプト) || !missing(onMouseDown) || !missing(onMouseMove) ||
! 行方不明 (onMouseUp) || !missing(onKeybd)) {
setGraphicsEventHandlers(prompt = プロンプト、onMouseDown = onMouseDown、
onMouseMove = onMouseMove、onMouseUp = onMouseUp、
onKeybd = onKeybd)
}
.External2(C_getGraphicsEvent, consolePrompt)
}
環境 (getGraphicsEvent2) = 環境 (grDevices::getGraphicsEvent)
dragplot(rnorm(1000), rnorm(1000))
kbd = 関数 (キー) {
if (key == "q") { "終了" } else NULL }
getGraphicsEvent2("入力待ち", onKeybd = kbd)
機能が失われているように見えます (つまり、グラフィック デバイスとして X11 を使用している OSX でプロットを操作できませんでした) が、少なくともプロットは維持されます。この関数の内部コードへの呼び出しが最近変更されました (確認するには、2 つのバージョンの R のソース コードを参照してください。たとえば、R 2.6.2 のこの関数のコードは R-2.6.2/src/library/grDevices にあります。 /R/gevents.R)。