2

私はRで多くのデータ探索を行っており、(インタラクティブなRコンソールから)生成したすべてのプロットを保持したいと思います。プロットしたものすべてがタイムスタンプ付きのPDFとして自動的に保存されるディレクトリを考えています。また、これがプロットの通常の表示を妨げないようにします。

これを行うために追加できるものはあり~/.Rprofileますか?

4

3 に答える 3

7

一般的な考え方は、プロットを再生成するためにプロットを生成するスクリプトを作成することです。ESSのドキュメント(README内)には、「ESSを使用するための哲学」の下によく記載されています。

ソースコードは本物です。オブジェクトはソースコードの実現です。ユーザーが変更したすべてのオブジェクトのソースは、後で編集および取得できるように、特定の1つまたは複数のディレクトリに配置されます。

どのエディターでも、コマンドを段階的(または地域的)に実行でき、この方法で作業を追跡できます。

于 2012-07-11T15:56:13.900 に答える
3

最善のアプローチは、スクリプトファイル(またはsweaveまたはknitrファイル)を使用して、必要なときにすべてのグラフを(pdfファイルなどに)再作成できるようにすることです。

しかし、ここにあなたが尋ねたことの基本を行うアプローチの始まりがあります:

savegraphs <- local({i <- 1; 
    function(){
      if(dev.cur()>1){
        filename <- sprintf('graphs/SavedPlot%03d.pdf', i)
        dev.copy2pdf( file=filename )
        i <<- i + 1
      }
    }
})

setHook('before.plot.new', savegraphs )

setHook('before.grid.newpage', savegraphs )

これで、新しいグラフを作成する直前に、現在のグラフが現在の作業フォルダーのグラフフォルダーに保存されます(グラフが存在することを確認してください)。これは、プロット(、、、など)に追加すると、注釈が含まれることを意味しlinesます。ただし、最後のプロットを保存するには、実行する必要があります(また、別のプロットを実行せずに現在のグラフィックデバイスを閉じると、その最後のプロットは保存されません)。pointsablineplot.newplot.new

このバージョンは、同じ作業ディレクトリにある前のRセッションから保存されたプロットを上書きします。ベースグラフィックまたはグリッドグラフィック以外のものを使用した場合も失敗します(おそらく、複雑なプロットを使用した場合でも)。時々追加のプロットが表示されても驚かないでしょう(内部でいくつかのパラメーターを取得するためにプロットが作成され、すぐに目的のプロットに置き換えられた場合)。私が見落としていることはおそらく他にもありますが、これで始めることができるかもしれません。

于 2012-07-12T18:58:57.243 に答える
2

一般的に使用されるプロット関数用に独自のラッパー関数を作成できます。このラッパー関数は、オンスクリーンディスプレイとタイムスタンプ付きのPDFバージョンの両方を呼び出します。〜/ .Rprofilesource()でこの関数を使用して、Rを実行するたびに使用できるようにすることができます。

laticeのxyplotの場合、windowsオンスクリーンディスプレイ用のデバイスを使用します。

library(lattice)
my.xyplot <- function(...){
    dir.create(file.path("~","RPlots"))
    my.chart <- xyplot(...)
    trellis.device(device="windows",height = 8, width = 8)
    print(my.chart)
    trellis.device(device = "pdf",
                   file = file.path("~", "RPlots",
                   paste("xyplot",format(Sys.time(),"_%Y%m%d_%H-%M-%S"),
                         ".pdf", sep = "")),
                   paper = "letter", width = 8, height = 8)
    print(my.chart)
    dev.off()
}

my.data <- data.frame(x=-100:100)
my.data$y <- my.data$x^2

my.xyplot(y~x,data=my.data)

他の人が言っているように、インタラクティブ端末から排他的に作業するのではなく、おそらくRスクリプトから作業する習慣を身につける必要があります。スクリプトを保存すると、将来的にすべてが再現可能で変更可能になります。それにもかかわらず、「プロットのログ」は興味深いアイデアです。

于 2012-07-11T18:07:26.807 に答える