从参数设置Rmarkdown中的文档标题

时间:2015-08-06 16:55:07

标签: r r-markdown pandoc

我有一个运行良好的Rmarkdown模板,我已将其参数化,因此我可以从不同的数据源生成相同报告的变体。但是,我想在每种情况下更改报告的标题。我怎么做?

这是我到目前为止的YAML标题:

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

我在params=list(title="ASDF")的调用中尝试使用rmarkdown::render,虽然我的代码可以看到该变量,但它不会更改标题。我也尝试在YAML中使用r params$title,但这会产生语法错误。

还有什么我应该尝试的吗?谢谢!

3 个答案:

答案 0 :(得分:60)

尝试使用第二个YAML元数据块,并将参数化元数据放在那里。

我得到以下代码按预期工作(即从params列表中生成文档标题):

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

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

RMarkdown documentation注意到YAML元数据块由Pandoc组合。使用第一个块来定义参数集,使用第二个块将参数用作元数据。 Knitr将执行R代码来解释第二个块中的参数。然后Pandoc将元数据块合并在一起。

更新(2017):

这可以在一个块中完成,如下所示:

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

这是有效的,因为标题出现在params定义之后。我在内联R代码周围加上引号以防止"扫描程序错误"。

答案 1 :(得分:3)

这是解决动态标题挑战的一种更为简化的方法:

像这样从顶部声明中解耦标题:

从此:

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

为此:

    ---
    output: pdf_document
    --- 

    <r code chunks>

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

在R代码块中,声明“ name_of_title_variable”。现在,标题保留在变量中。希望这会有所帮助!

答案 2 :(得分:2)

添加此答案,因为它有助于使R降价标题动态化。

只需使用!r后跟定义的对象名称(在下面的情况下为test_title),使标题动态化。

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