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

Har*_*lan 35 r pandoc r-markdown

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

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

---
title: "My Title"
author: "Me, Inc."
date: "August 4, 2015"
output: pdf_document
params:
  title: default
---
Run Code Online (Sandbox Code Playgroud)

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

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

TJ *_*ahr 69

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

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

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

---
title: `r params$set_title`
---
Run Code Online (Sandbox Code Playgroud)

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

更新(2017年):

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

---
output: html_document
params: 
    set_title: "My Title!"
title: "`r params$set_title`"
---
Run Code Online (Sandbox Code Playgroud)

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

  • 实际上你可以使用一个YAML块来实现它,只要`title:...`来自*params`声明之后. (12认同)
  • 在这个例子中"我的标题!" 是一个文本字符串.如果你想根据数据中的变量动态创建标题(可以根据数据的来源而改变),你会如何改变? (8认同)
  • 如果你得到一个`Scanner error`,你可能需要在反引号旁边引用引号(即将值作为YAML解析器的字符串). (4认同)
  • **这也适用于你运行一些代码后,比如导入和转换数据**,使用2个YAML块的第一个选项@Lloyd Christmas (2认同)

小智 5

这是动态标题挑战的一种更简化的方法。

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

由此:

---
title: "Sample Title"
output: pdf_document
---
Run Code Online (Sandbox Code Playgroud)

为此:

---
output: pdf_document
--- 

```{r}
title_var <- "Sample Title"
```

---
title: `r title_var`
---
Run Code Online (Sandbox Code Playgroud)

在R代码块中,声明title_var。现在,标题保留在变量中。希望这可以帮助!