すべてのプロットを自動的にファイルにリダイレクトしたい(理由: 以下を参照)。それを達成するための非ハッキーな方法はありますか?
それがなければ、私は組み込み関数をオーバーライドすることを実際には恐れていません。私は必死です。私が考えることができる最も簡単な方法は、基本的なプロット ウィンドウ作成関数に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
であり、できる限り合理化するために呼び出しをなくしたいと考えています.
チャンスはありますか?