web-dev-qa-db-ja.com

R Markdown-変数出力名

1つのRマークダウンファイルを使用して、出力ファイル名をドキュメント内で定義する必要があるさまざまな出力PDFドキュメントを作成したいと思います。このような方法で出力ファイル名を操作するようにマークダウンを説得する方法はありますか?理想的には、rチャンクでファイル名を渡したいと思います。

27
Sosel

文書化されていないKnitフックを使用してボタンの機能を再定義することにより、RStudio knitボタンとYAMLヘッダーの再現性のシンプルさを維持できます(デフォルトの関数はrmarkdown::render) 。レンダリング関数のoutput_fileパラメーターはファイル名を指定するため、設定することにより、入力ファイル名と同じプレフィックスを使用する標準の動作をオーバーライドします。

例えばmyfile.pdfというファイルを常に出力する

knit: (function(inputFile, encoding) { rmarkdown::render(inputFile, encoding = encoding, output_file = file.path(dirname(inputFile), 'myfile.pdf')) })

here with slidify のように、関数はパッケージからインポートされるだけでなく、匿名のワンライナーにすることができます。

rmarkdown::metadata$newheaderの下でアクセス可能な独自のYAMLヘッダーを設定できます(これが一般的に推奨されるかどうかはわかりません)が、私が見る限り、この種の関数内からは利用できないようです。

Rチャンクからファイル名を渡すことに関しては... YAMLヘッダーの下のコードチャンクを参照している場合、私の経験からそれは可能だとは思いません(?)。ヘッダーには、インラインRコマンド(rで始まる単一のバックティックで囲まれたコマンド)を含めることができますが、このフック関数用ではないようです。

関連

35
Louis Maddox

これは私がやることです。

rmarkdown::render('my_markdown_report.Rmd',
                  output_file = paste('report.', Sys.Date(), 
                                      '.pdf', sep=''))

3つのスクリプトがあります。1つはデータを取得して処理し、2つ目はレポート用のグラフと表を作成しました。 3つ目は、マークダウンファイルに基づいてレポートを作成します。上記のコードは3番目のスクリプトの一部です

22
ilya

@ilyaが書いたものに続いて、このWebページには、彼らが説明していることを示す素晴らしい例があります。これは、同じ.Rmd文書から複数の再現可能なレポートを作成する方法です。

http://www.reed.edu/data-at-reed/software/R/markdown_multiple_reports.html

Webページは、1つのRスクリプトと1つのRmarkdownスクリプトの2つのスクリプトを使用して、複数のレポートを作成します。私はそれを自分の仕事のテンプレートとして使用しましたが、非常に便利でした。

4
K Bro

私の最善の回避策(これまで)

スタックの完全なストーリーを参照

Knitr-hookの動作を完全に理解せずに遊んでみたところ、aroundい回避策が見つかりました。以下のコーディングがトリックを行うようです。誰かがそれがなぜ機能するのか、そして/またはあまりlessく書けないのであれば、誰かが説明できるならいいでしょう。

今のところ、私は光沢のある入力画面を失いましたが、これは後で追加することさえできると信じています。良いことは、R-Studio Knitボタンを引き続き使用できることです。

字幕とファイル名は両方とも:This Works!でもスペースと感嘆符が付いていることに注意してください。ファイルはThis Works!.pdfとして保存されます

ファイル名とサブタイトルは、テキストをオブジェクトpSubTitleに割り当てることで設定されます。 paramsはまだYAMLにありますが、Knitr-hookに割り当てられているため、光沢のあるポップアップ画面にはなりません。

enter image description here

---
params: 
  sub_title:
    input: text
    label: Sub Title
    value: 'my_Sub_Title_and_File_Name'
title    : "Parameterized_Title_and_output_file"
subtitle : "`r params$sub_title`"
output:
  pdf_document:
    keep_tex: false
knit: (
  function(inputFile, encoding) { 

    pSubTitle <- 'This Works!'

    rmarkdown::render( 
      input       = inputFile, 
      encoding    = encoding, 
      params      = list(sub_title = pSubTitle),      
      output_file = pSubTitle) })
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

## R Markdown

This is an R Markdown document. ....
1
Floris Padt