【问题标题】:Setting document title in Rmarkdown from parameters从参数设置 Rmarkdown 中的文档标题
【发布时间】:2015-10-29 22:40:10
【问题描述】:

我有一个运行良好的 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,但这会产生语法错误。

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

【问题讨论】:

    标签: r r-markdown pandoc


    【解决方案1】:

    尝试使用第二个 YAML 元数据块,并将参数化的元数据放入其中。

    我让以下代码按预期工作(即,从参数列表中生成文档标题):

    ---
    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 代码周围加上引号以防止“扫描仪错误”。

    【讨论】:

    • 只要title: ... 出现在params 声明之后,您实际上就可以使用单个YAML 块来实现。
    • 如果你得到Scanner error,你可能需要在反引号两边加上引号(即,将值设为 YAML 解析器的字符串)。
    • 在本例中为“我的标题!”是一个文本字符串。如果您希望根据数据中的变量动态创建标题(可能会根据该数据的来源而改变),您将如何更改此设置?
    • 我不确定这是否是我的设置,但是当我使用 set_title 的逻辑时,我不得不使用第二个 YAML 元块,就像上面的原始答案一样
    • 这也适用于您运行一些代码后,例如导入和转换数据,使用 2 YAML 块的第一个选项@Lloyd Christmas
    【解决方案2】:

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

    将标题与顶部声明解耦,如下所示:

    来自:

    ---
    title: "Sample Title"
    output: pdf_document
    ---
    

    致此:

    ---
    output: pdf_document
    --- 
    
    ```{r}
    title_var <- "Sample Title"
    ```
    
    ---
    title: `r title_var`
    ---
    

    在 R 代码块中,声明 title_var。现在标题保存在一个变量中。希望这会有所帮助!

    【讨论】:

      【解决方案3】:

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

      只需使用 !r 后跟定义的对象名称(下例中为 test_title)即可使标题动态化。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-09-20
        • 2023-03-04
        • 2021-12-29
        • 2012-12-11
        • 1970-01-01
        • 2017-06-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多