3

すべてのプロットを自動的にファイルにリダイレクトしたい(理由: 以下を参照)。それを達成するための非ハッキーな方法はありますか?

それがなければ、私は組み込み関数をオーバーライドすることを実際には恐れていません。私必死です。私が考えることができる最も簡単な方法は、基本的なプロット ウィンドウ作成関数にpdf(…)フックして呼び出し、次にプロット ファイナライズ関数にフックしてdev.off()そこで呼び出すことです。

しかし、これらの機能は何ですか?デバッグを通じて、私は暫定的に特定dev.holdしましdev.flushたが、これは実際に普遍的に当てはまるのでしょうか? これらの関数にフックできますか? R.utilsそれらはロックされているため、 'でオーバーライドできずreassignInNamespace、同じ名前の関数をグローバル名前空間に配置するだけでは機能しません (それらは によって無視されますplot)。


では、なぜ私はそんなにひどいことをしたいのですか?

私はリモートサーバーで作業しているため、最善を尽くし、システムサポートとの長いデバッグセッションにもかかわらず、X11 転送を確実に動作させることができません。プロットをプレビューできないため、ワークフローが非常に非効率的になっています。X11 を動作させるのをあきらめたので、今は自分のpublic_htmlフォルダーに PDF を作成し、ブラウザーを更新するだけです。

これは非常にうまく機能しますがpdf(…) … dev.off()、特に共同作業者との会議中にプロットをすばやく作成したいインタラクティブなセッションでは、プロット関数呼び出しを常に で囲む必要があるのは本当に面倒でかなり時間がかかります. 実際、それは本当に面倒で、彼らは(当然のことながら)それに対する忍耐力を持っていません.

今のところ、次の関数定義を手伝っています。

preview <- function (.expr, ...) {
    on.exit(dev.off())
    pdf(PREVIEW_FILE_NAME, ...)
    eval(substitute(.expr))
}

これは次のように使用されます:

preview(plot(1:100, rnorm(100) * 1:100))

それは大丈夫です。しかし、このワークフローは会議の本当のボトルネックpreviewであり、できる限り合理化するために呼び出しをなくしたいと考えています.

チャンスはありますか?

4

1 に答える 1

5

設定options(device=FUN)した場合、グラフィックス デバイス関数FUNは、プロットが作成され、デバイスがまだ開かれていないときに開かれる新しいデフォルトのグラフィックス デバイスになります。

したがって、オプションの 1 つは、必要なファイル名とオプション (おそらく ) を使用して または または他のグラフィックス デバイスを呼び出すpdf関数を記述し、この関数をオプションの既定値として設定することです。、、 またはのいずれかを使用して、現在のプロットを終了する必要がある場合があります (R は、デバイスを閉じるか、現在のプロットに何かを追加する場合に備えて新しいプロットに移動するまで終了しません)。pngonefile=FALSEpdfdev.offplot.newframe

プロットに追加しない場合は、自動的addTaskCallbackに呼び出すdev.offために使用できます。ファイナライズに使用できるフックが他にもある場合があります。

于 2013-07-12T16:29:56.633 に答える