4

次のように、呼び出しのでグローバル チャンク オプションを設定しようとしています。knit

opts_chunks$set(dev='pdf')
knit(input)

ただし、内knitの新しいセットを使用しているように見えるため、機能していません。opts_chunksknit

への呼び出しの外側でグローバル チャンク オプションを設定し、へknitの呼び出しに適用することは可能knitですか?


私がこれをしている理由:

私は (R マークダウン) ドキュメントを書いていますが、これらを pdfまたはHTMLRmdに編むことができるようにしたいと考えています。

knit2 <- function (input, out=c('pdf', 'html')) {
    # set the appropriate output image format
    opts_chunk$set(dev=ifelse(out == 'pdf', 'pdf', 'svg')) # <--

    # knit to md
    o <- knit(input)

    # knit md to html or pdf
    pandoc(input=o, format=ifelse(out == 'pdf', 'latex', 'html'))
}

つまり、knit2('mydoc.Rmd', 'pdf')ORknit2('mydoc.Rmd', 'html')実行でき、 output に応じて Rmd を変更する必要がないという考えです。

私が遭遇した問題は、画像を HTML 出力用に SVG に、PDF 出力用に PDF にしたいということでした (ベクトル グラフィックが必要でしたが、SVG は Latex では機能せず、pdf は HTML では機能しないため、変更する必要があります。これは出力形式に基づいています)、つまり

opts_chunk$set(dev=ifelse(out == 'pdf', 'pdf', 'svg'))

これを の定義とともに Rmd ファイルのチャンクに入れると、機能することがわかっていますout。ただし、 が呼び出されるまでmydoc.Rmd割り当てることができないため、これを 内に埋め込みたくありません。実際に必要な出力はわかっています。outputknit2

したがって、knit2 がdev呼び出しの前に何らかの方法でオプションを設定し、knitそのオプションが の期間に適用されるようにしたいと考えていますknit(Rmd ファイルの外部、つまり でopts_chunk$set(dev=ifelse(out=='pdf', 'pdf', 'svg'))定義できるのであれば、 my を Rmd ファイルに埋め込むことも受け入れますが、すべてを から処理できる場合は、それを希望します)out knit2knit2

4

1 に答える 1

4

ドキュメントの外部でグローバル オプションを設定することは可能ですが、devオプションは唯一の例外です。出力が HTML の場合、はによって内部的にdev(再) 設定されます。このオプションを変更したい場合は、その前にこの関数を呼び出す必要があります:'png'render_markdown()

knit2 <- function (input, out=c('pdf', 'html')) {
  if (out == 'html') {
    render_markdown()
    # use SVG for HTML output
    opts_chunk$set(dev='svg')
  }

  # knit to md
  o <- knit(input)

  # knit md to html or pdf
  pandoc(input=o, format=ifelse(out == 'pdf', 'latex', 'html'))
}

実際、私は非常によく似た問題を抱えており、これを例 084に示しました(そこを参照してください。Markdown 用084-pandoc.Rに変更dev'pdf'ました)。

于 2013-04-17T05:04:47.480 に答える