1つのRマークダウンファイルを使用して、出力ファイル名をドキュメント内で定義する必要があるさまざまな出力PDFドキュメントを作成したいと思います。このような方法で出力ファイル名を操作するようにマークダウンを説得する方法はありますか?理想的には、rチャンクでファイル名を渡したいと思います。
文書化されていない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
で始まる単一のバックティックで囲まれたコマンド)を含めることができますが、このフック関数用ではないようです。
関連:
output_file
knit:
フックのより精巧な使用 /対応する GitHub wiki notesこれは私がやることです。
rmarkdown::render('my_markdown_report.Rmd',
output_file = paste('report.', Sys.Date(),
'.pdf', sep=''))
3つのスクリプトがあります。1つはデータを取得して処理し、2つ目はレポート用のグラフと表を作成しました。 3つ目は、マークダウンファイルに基づいてレポートを作成します。上記のコードは3番目のスクリプトの一部です
@ilyaが書いたものに続いて、このWebページには、彼らが説明していることを示す素晴らしい例があります。これは、同じ.Rmd文書から複数の再現可能なレポートを作成する方法です。
http://www.reed.edu/data-at-reed/software/R/markdown_multiple_reports.html
Webページは、1つのRスクリプトと1つのRmarkdownスクリプトの2つのスクリプトを使用して、複数のレポートを作成します。私はそれを自分の仕事のテンプレートとして使用しましたが、非常に便利でした。
Knitr-hookの動作を完全に理解せずに遊んでみたところ、aroundい回避策が見つかりました。以下のコーディングがトリックを行うようです。誰かがそれがなぜ機能するのか、そして/またはあまりlessく書けないのであれば、誰かが説明できるならいいでしょう。
今のところ、私は光沢のある入力画面を失いましたが、これは後で追加することさえできると信じています。良いことは、R-Studio Knitボタンを引き続き使用できることです。
字幕とファイル名は両方とも:This Works!でもスペースと感嘆符が付いていることに注意してください。ファイルはThis Works!.pdfとして保存されます
ファイル名とサブタイトルは、テキストをオブジェクトpSubTitleに割り当てることで設定されます。 paramsはまだYAMLにありますが、Knitr-hookに割り当てられているため、光沢のあるポップアップ画面にはなりません。
---
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. ....