YAML中用于rmarkdown的内联R代码不会运行

时间:2015-09-17 18:17:47

标签: r r-markdown

我想在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代码?

这些问题也存在类似的问题:

2 个答案:

答案 0 :(得分:3)

这就是我解决这个问题的方法。我是从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")

答案 1 :(得分: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')

似乎运作良好。如果有人有更好的想法,请告诉我!