2

pdf関数を使用してプロット デバイスを開いて名前を付けたいと思います。デバイスを開く関数を呼び出したレベルでプロットします。dev.off()そのレベルで指定されたコマンドを使用してそれを閉じます-これはで可能Rですか?

バックグラウンド

私はpdf定期的に R から to を出力します。そのため、多くのことを行います。

pdf(file.path(plotPATH, pdfName), width = Wwidth, height = Hheight)
plot( ...)
dev.off()

怠惰を促進するために、プロット デバイスを開いてpdf(file.path(plotPATH ...))ボイラープレートを保存する関数を作成しました。

私が作成した関数は次のとおりです。

pdfMk <- function(pdfName, Wwidth = 480, Hheight = 480) 
{ 
    pdf(file.path(plotPATH, pdfName), width = Wwidth, height = Hheight)
}

私は次のように呼びたいです:

pdfMk("foo.pdf")
plot(...)
dev.off()

問題は、これが機能しないことです...出力はpdf適切な名前と適切な場所にありますが、常に空白です。

クロージャー(または何か)に問題があるのではないかと思ったので、関数呼び出しが終了する前にpdfMk関数をステップスルーしdebugてプロットを作成しようとしましたが、出力は空白のpdfのままです(どちらの場合もエラーメッセージはありません)。

これは可能ですか?もしそうなら、どうすれば私の目的を達成できますか?

4

2 に答える 2

2

デフォルト値を除いて、コードは想定どおりに機能します。

から?pdf:

幅、高さ: グラフィックス領域の幅と高さ (インチ単位)。デフォルト値は 7 です。

40 x 40 フィートのサイズのドキュメントを作成しています。

于 2013-11-14T00:04:17.530 に答える
1

好奇心から:dev.off()関数にプロットとを含めてみませんか? 何かのようなもの

plotpath=file.path("C:","temp")

pdf_wrapper=function(plot_expression,pdfName,plotpath,Wwidth=7,Hheight=7) {
    pdf(file.path(plotpath,pdfName),width=Wwidth,height=Hheight)
    plot_expression
    dev.off()
    Sys.sleep(0.5)
}

pdf_wrapper(plot(c(1,2),c(1,2),type='l',col='blue',lty=2),"test.pdf",plotpath)

ところで:そのような場合、私は常にSys.sleep(...)最後に含めます。これは、 の後続の呼び出しがある場合に役立ちますpdf_wrapper。これが R によるものなのか RStudio によるものなのかはわかりませんが、待ち時間を考慮しないと pdf ファイルが破損することがあります。デバイスを適切にオフにするのに十分な時間が確保されているようです。ただし、私は使用してggplot2おり、graphics::plotこれは問題にならない可能性があります。

于 2013-11-14T01:44:45.690 に答える