【问题标题】:Inline R code in YAML for rmarkdown doesn't run用于 rmarkdown 的 YAML 中的内联 R 代码不运行
【发布时间】:2015-12-14 17:40:42
【问题描述】:

在让rmarkdown 运行文件之前,我正在尝试在 YAML 前端运行内联 R 代码。但是它对我不起作用。这是一个例子:

---
title: "**Title**"
classoption: xcolor=dvipsnames
output:
  beamer_presentation:
      slide_level: 2
      pandoc_args: [
        "--bibliography", "`r paste('path/to/bib')`"
        ]
---

<!-- slide 1 -->
## Intro ##

这会引发错误:

pandoc-citeproc: could not find `r paste('path/to/bib')`

这是一个简单的例子,但突出了我的主要问题。如何让 rmarkdown 在 YAML 前端运行内联 R 代码?

与这些问题类似的问题:

【问题讨论】:

    标签: r r-markdown


    【解决方案1】:

    这就是我解决这个问题的方法。我从 RStudio 编织。奇怪的是,我不得不对日期和 csl 字段使用一种解决方案,而对参考书目字段使用不同的解决方案。 !expr 在日期或 csl 行中不起作用(对我来说)。并且引用的 r 代码在参考书目行中不起作用(对我而言)。我在一个包(inst/docs 文件夹)中有参考书目和 csl 文件。不属于该软件包的 rmarkdown 文件使用这些文件。

    ---
    title: "Title"
    date: '`r format(Sys.time(), "%d %B, %Y")`'
    output: html_document
    bibliography: !expr system.file("docs", "my.bib", package = "MyPackage")
    csl: '`r system.file("docs", "my.csl", package = "MyPackage")`'
    ---
    
    # Introduction
    
    Yada yada [@MyRef04].
    
    # References
    

    my.bib 是带有 MyRef04 的 BibTex 文件。 csl 是样式文件

    在这种情况下,一个人维护一个包含数据、代码、参考书目等的包。包编写者可能不知道的其他人从 GitHub 安装该包并编写或运行使用该包的 rmarkdown 文件。用户几乎可以肯定不使用 Git 或 GitHub,我不希望他们在从 GitHub 安装软件包后下载任何额外的文件。

    更新:发布以上内容后,我碰巧从 GitHub 安装了 markdown,因为我需要在开发版本中的一些东西。使用 GitHub 上的 rmarkdown 版本“1.7.5”,您可以在参考书目行中使用 r 代码:

    ---
    title: "Title"
    date: '`r format(Sys.time(), "%d %B, %Y")`'
    output: html_document
    bibliography: '`r system.file("docs", "my.bib", package = "MyPackage")`'
    csl: '`r system.file("docs", "my.csl", package = "MyPackage")`'
    ---
    

    从 GitHub 安装 rmarkdown

    library(devtools)
    install_github("rstudio/rmarkdown")
    

    【讨论】:

      【解决方案2】:

      所以我找到了一个关于获得我想要的东西的方法。 Rmarkdown 我认为不允许在 YAML 中使用 R 表达式/命令,这可能是有充分理由的。我最终做的是将所有输出 yaml 命令放在一个名为 _output.Ryaml 的文件中,如下所示:

      beamer_presentation:
        slide_level: 2
        includes:
          in_header: "src/preamble.tex"
        pandoc_args: [
          "--bibliography", "`r paste('path/to/bib')`",
          "--variable", "classoption:xcolor=dvipsnames",
          "--variable", "fontsize:9pt"
          ]
      

      然后在 slides.Rmd 主文件中,是这样的:

      ---
      title: "**Title**"
      author: Luke
      ---
      
      <!-- slide 1 -->
      ## Intro ##
      

      然后,我可以使用 R 代码(我将其放入 Makefile)生成幻灯片:

      knitr::knit('_output.Ryaml', '_output.yaml')
      rmarkdown::render('slides.Rmd')
      unlink('_output.yaml')
      

      似乎运行良好。如果有人有更好的主意,请告诉我!

      【讨论】:

        猜你喜欢
        • 2018-12-20
        • 1970-01-01
        • 1970-01-01
        • 2017-12-08
        • 1970-01-01
        • 2023-02-01
        • 2021-09-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多