我有一个运行良好的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
,但这会产生语法错误。
还有什么我应该尝试的吗?谢谢!
答案 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`
---