web-dev-qa-db-ja.com

パラメーターからRmarkdownでドキュメントのタイトルを設定する

うまく機能するRmarkdownテンプレートを用意し、それをパラメーター化して、異なるデータソースから同じレポートのバリアントを生成できるようにしました。ただし、各ケースでレポートのタイトルを変更したいと思います。それ、どうやったら出来るの?

ここに私がこれまで持っているYAMLヘッダーがあります:

_---
title: "My Title"
author: "Me, Inc."
date: "August 4, 2015"
output: pdf_document
params:
  title: default
---
_

_rmarkdown::render_の呼び出しでparams=list(title="ASDF")を使用してみましたが、私のコードではその変数を見ることができますが、タイトルは変更されません。 YAMLで_r params$title_を使用しようとしましたが、構文エラーが発生します。

私がしようとしている他のものはありますか?ありがとう!

34
Harlan

2番目のYAMLメタデータブロックを使用して、パラメーター化されたメタデータをそこに配置してください。

次のコードを期待どおりに動作させました(つまり、paramsのリストからドキュメントのタイトルを生成します):

---
output: html_document
params: 
    set_title: "My Title!"
---

---
title: `r params$set_title`
---

RMarkdown documentation は、YAMLメタデータブロックがPandocによって結合されることを示しています。最初のブロックを使用してパラメーターセットを定義し、2番目のブロックを使用してパラメーターをメタデータとして使用します。 KnitrはRコードを実行して2番目のブロックのパラメーターを解釈します。その後、Pandocはメタデータブロックをマージします。

更新(2017):

これは、次のように単一のブロックで実現できます。

---
output: html_document
params: 
    set_title: "My Title!"
title: "`r params$set_title`"
---

これは、タイトルがparams定義の後に来るために機能します。 「スキャナーエラー」を防ぐために、インラインRコードを引用符で囲みます。

67
TJ Mahr

これは、動的タイトルの課題に対するより単純化されたアプローチです。

次のようにタイトルをトップ宣言から分離します。

これから:

    ---
    title: Sample_Title
    output: pdf_document
    --- 

これに:

    ---
    output: pdf_document
    --- 

    <r code chunks>

    ---
    title: `r name_of_title_variable`
    ---

Rコードチャンク内で、「name_of_title_variable」を宣言します。これで、タイトルは変数内に保持されます。お役に立てれば!

4
Lahi S

この回答を追加すると、Rマークダウンタイトルを動的にするのに役立ちます。

!rの後に定義されたオブジェクト名(以下の場合はtest_title)を使用して、タイトルを動的にします。

---
output: pdf_document
params:
set_title: !r test_title
---
---
title: `r params$set_title`
---
2
Rishabh