3

knitr分析に使用しています。グラフをPDF形式で保存し\SweaveOpts{dev=pdf}たり、png形式で保存したりできます\SweaveOpts{dev=png}。グラフをpdf形式とpng形式の両方で一度に保存したいのですが、最終的なドキュメントでpdfをインタラクティブに使用したいと思っています。任意の提案をいただければ幸いです。ありがとう

4

1 に答える 1

4

ここに本当の解決策があります:

Knitr 0.3.9 では、チャンクごとに複数のデバイスのサポートが開始されています (現時点では、GitHub からインストールする必要があります)。あなたの場合、チャンクオプションdev=c('pdf', 'png')を設定して、PDFファイルとPNGファイルの両方を取得できます。


ImageMagick を使用して PDF ファイルを PNG に変換するソリューションを次に示します。もちろん、最初に ImageMagick をインストールし、その bin ディレクトリが次の場所にあることを確認する必要がありPATHます。

knit_hooks$set(convert = function(before, options, envir) {
  # quit if before a chunk or no figures in this chunk
  if (before || (n <- options$fig.num) == 0L) return()
  # only convert pdf files
  if (options$fig.ext != 'pdf') return()

  # use ImageMagick to convert all pdf to png
  name = fig_path()  # figure filename
  owd = setwd(dirname(name)); on.exit(setwd(owd))
  files = paste(basename(name), if (n == 1L) '' else seq(n), sep = '')
  lapply(files, function(f) {
    system(sprintf('convert %s.pdf %s.png', f, f))
  })
  NULL
})

基本的に、このフックはチャンクの後に実行さconvert foo.pdf foo.pngれ、すべての PDF 図で実行されます。次のように使用できます

<<test-png, convert=TRUE>>=
  plot(1); plot(2)
@

または、すべての Figure を別のディレクトリに置く場合は、そのディレクトリで直接実行できます(つまり、Rconvertを呼び出す必要はありません)。system()

これは理想的な解決策ではありませんが、うまくいくはずです。R のネイティブpng()デバイスを利用するには、まず上記のコメントで私の質問に答える必要があります。

于 2012-03-12T01:43:02.927 に答える